新一代 javascript 模板引擎javascript
include
語句使用一個type="text/html"
的script
標籤存放模板:html
<script id="test" type="text/html"> <h1>{{title}}</h1> <ul> {{each list as value i}} <li>索引 {{i + 1}} :{{value}}</li> {{/each}} </ul> </script>
var data = { title: '標籤', list: ['文藝', '博客', '攝影', '電影', '民謠', '旅行', '吉他'] }; var html = template('test', data); document.getElementById('content').innerHTML = html;
演示前端
有兩個版本的模板語法能夠選擇。java
推薦使用,語法簡單實用,利於讀寫。node
{{if admin}} {{include 'admin_content'}} {{each list}} <div>{{$index}}. {{$value.user}}</div> {{/each}} {{/if}}
查看語法與演示git
<%if (admin){%> <%include('admin_content')%> <%for (var i=0;i<list.length;i++) {%> <div><%=i%>. <%=list[i].user%></div> <%}%> <%}%>
查看語法與演示github
根據 id 渲染模板。內部會根據document.getElementById(id)
查找模板。express
若是沒有 data 參數,那麼將返回一渲染函數。npm
compile
(source, options)將返回一個渲染函數。演示後端
render
(source, options)將返回渲染結果。
helper
(name, callback)添加輔助方法。
例如時間格式器:演示
config
(name, value)更改引擎的默認配置。
字段 | 類型 | 默認值 | 說明 |
---|---|---|---|
openTag | String | '{{' |
邏輯語法開始標籤 |
closeTag | String | "}}" |
邏輯語法結束標籤 |
escape | Boolean | true |
是否編碼輸出 HTML 字符 |
cache | Boolean | true |
是否開啓緩存(依賴 options 的 filename 字段) |
compress | Boolean | false |
是否壓縮 HTML 多餘空白字符 |
可突破瀏覽器限制,讓前端模板擁有後端模板同樣的同步「文件」加載能力:
1、按文件與目錄組織模板
template('tpl/home/main', data)
2、模板支持引入子模板
{{include '../public/header'}}
預編譯工具:TmodJS
npm install art-template
var template = require('art-template'); var data = {list: ["aui", "test"]}; var html = template(__dirname + '/index/main', data);
NodeJS 版本新增了以下默認配置:
字段 | 類型 | 默認值 | 說明 |
---|---|---|---|
base | String | '' |
指定模板目錄 |
extname | String | '.html' |
指定模板後綴名 |
encoding | String | 'utf-8' |
指定模板編碼 |
配置base
指定模板目錄能夠縮短模板的路徑,而且可以避免include
語句越級訪問任意路徑引起安全隱患,例如:
template.config('base', __dirname); var html = template('index/main', data)
var template = require('art-template'); template.config('extname', '.html'); app.engine('.html', template.__express); app.set('view engine', 'html'); //app.set('views', __dirname + '/views');
若使用 js 原生語法做爲模板語法,請改用
require('art-template/node/template-native.js')
爲了適配 NodeJS express,artTemplate v3.0.0 接口有調整。
template.render()
方法的第一個參數再也不是 id,而是模板字符串template.config()
而且字段名有修改template.compile()
方法不支持 id 參數template.helpers
中的$string
、$escape
、$each
已遷移到template.utils
中template.render
替換爲template
template.config(name, value)
來替換之前的配置include
語句也支持相對路徑print
語句支持傳入多個參數{{time | dateFormat:'yyyy年 MM月 dd日 hh:mm:ss'}}
當前版本接口有調整,請閱讀 升級參考
artTemplate 預編譯工具 TmodJS 已更新
$ npm install art-template -g
<%=#value%>
(兼容 v2.0.3 版本以前使用的<%==value%>
),而簡版語法則可使用{{#value}}
{{
與}}
。template.cache
訪問到編譯後的函數template.helpers
訪問到include
內部實現可能產生上下文不一致的問題。感謝 @warmhuginclude
支持支持,能夠支持不一樣目錄之間模板嵌套<%==value%>
(備註:v2.0.3 推薦使用<%=#value%>
),也能夠關閉默認的轉義功能template.defaults.escape = false
。Released under the MIT, BSD, and GPL Licenses
============
© tencent.com