artTemplate.js

artTemplate.js

artTemplate 是新一代 javascript 模板引擎,它採用預編譯方式讓性能有了質的飛躍,並且充分利用 javascript 引擎特性,使得其性能無論在前端還是後端都有極其出色的表現。

除了性能優勢外,調試功能也值得一提。模板調試器可以精確定位到引發渲染錯誤的模板語句,解決了編寫模板過程中無法調試的痛苦,讓開發變得高效,也避免了因為單個模板出錯導致整個套用崩潰的情況發生。

基本介紹

  • 中文名:艾特模版
  • 外文名:artTemplate.js
模板特性,快速上手,編寫模板,渲染模板,模板語法,簡潔語法,原生語法,方法示例,使用預編譯,升級參考,

模板特性

  1. 性能卓越,執行速度通常是 Mustache 與 tmpl 的 20 多倍
  2. 支持運行時調試,可精確定位異常模板所在語句
  3. 對 NodeJS Express 友好支持
  4. 安全,默認對輸出進行轉義、在沙箱中運行編譯後的代碼
  5. 支持include語句
  6. 可在瀏覽器端實現按路徑載入模板
  7. 支持預編譯,可將模板轉換成為非常精簡的 js 檔案
  8. 模板語句簡潔,無需前綴引用數據,有簡潔版本與原生語法版本可選
  9. 支持所有流行的瀏覽器

快速上手

編寫模板

使用一個type="text/html"的script標籤存放模板:
<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;

模板語法

有兩個版本的模板語法可以選擇。

簡潔語法

推薦使用,語法簡單實用,利於讀寫。
{{if admin}} {{include 'admin_content'}} {{each list}} <div>{{$index}}. {{$value.user}}</div> {{/each}}{{/if}}

原生語法

<%if (admin){%> <%include('admin_content')%> <%for (var i=0;i<list.length;i++) {%> <div><%=i%>. <%=list[i].user%></div> <%}%><%}%>

方法示例

template(id, data)
根據 id 渲染模板。內部會根據document.getElementById(id)查找模板。
如果沒有 data 參數,那么將返回一渲染函式。
template.compile(source, options)
將返回一個渲染函式。
template.render(source, options)
將返回渲染結果。
template.helper(name, callback)
添加輔助方法。
例如時間格式器:
template.config(name, value)
更改引擎的默認配置。
欄位類型默認值說明
openTag
String
'{{'
邏輯語法開始標籤
closeTag
String
"}}"
邏輯語法結束標籤
escape
Boolean
true
是否編碼輸出 HTML 字元
cache
Boolean
true
是否開啟快取(依賴 options 的 filename 欄位)
compress
Boolean
false
是否壓縮 HTML 多餘空白字元

使用預編譯

可突破瀏覽器限制,讓前端模板擁有後端模板一樣的同步“檔案”載入能力:
一、按檔案與目錄組織模板
template('tpl/home/main', data)
二、模板支持引入子模板
{{include '../public/header'}}
基於預編譯
  • 可將模板轉換成為非常精簡的 js 檔案(不依賴引擎)
  • 使用同步模板載入接口
  • 支持多種 js 模組輸出:AMD、CMD、CommonJS
  • 支持作為 GruntJS 外掛程式構建
  • 前端模板可共享給 NodeJS 執行
  • 自動壓縮打包模板

升級參考

為了適配 NodeJS express,artTemplate v3.0.0 接口有調整。
接口變更
  1. 默認使用簡潔語法
  2. template.render()方法的第一個參數不再是 id,而是模板字元串
  3. 使用新的配置接口template.config()並且欄位名有修改
  4. template.compile()方法不支持 id 參數
  5. helper 方法不再強制原文輸出,是否編碼取決於模板語句
  6. template.helpers中的$string、$escape、$each已遷移到template.utils中
  7. template()方法不支持傳入模板直接編譯

相關詞條

熱門詞條

聯絡我們