個人上篇博文詳細介紹了jquery tmpl,由於我想在個人項目裏引入JS模版,因此就研究了一下,有人告訴我這個引擎的速度很慢,因而我又去搜集了一下資料,結果發現jquery tmpl是最慢的,因而乎我就放棄了,對比下來發現勝出的有如下幾種artTemplate,dot,juicer三個從速度上勝出(chrome),可是在IE下最終選擇了dot,dot的文件是最小隻有5K(沒有壓縮),而且在IE裏也是最快的。javascript
下面介紹下dot的用法,其實用法很是簡單html
dot的API裏有如下幾種標籤java
//{{ }} JS原生態代碼
//{{= }} 變量運算,賦值 {{=it.f1 + it.f2}}
//{{! }} 賦值而且編碼
//{{# }}
//{{## #}}
上面兩個沒有仔細研究,基本我也不用它
//{{? }} 條件語句jquery
//{{~ }} 循環chrome
其實條件語句和循環能夠用{{if}}{{else if}}{{for(var i=0;i<length;i++)}}來代替,也就是JS的原生態代碼express
那麼咱們用到的只有前三種標籤就徹底夠用了,下面給出一個例子,就很容易看明白了app
<script id="tmpl-demo" type="text/tmpl"> {%if($data.suc){%} {%for (var i = 0; i < $data.users.length; i++) { %} {%var user=$data.users[i];%} <div style="margin-bottom:10px;"> <span style="margin-left:10px;">{%= user.Name%}</span> {%! user.url%}{%=global%} </div> {%}%} {%each($data);%} {%}%} </script> <script type="text/javascript"> function demo() { var fn = doT.template($("#tmpl-demo").html()); $("#demo").append(fn(data)); } </script> <div id="demo"></div>
多是有人疑問,不是{{}}嗎,其實dot容許自定義包括的標籤,這樣就會讓你使用本身喜歡的模版標籤ui
如,他的原本的設置是這樣的,是否是很容易修改編碼
var doT = { version: '1.0.1', templateSettings: { evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g, interpolate: /\{\{=([\s\S]+?)\}\}/g, encode: /\{\{!([\s\S]+?)\}\}/g, use: /\{\{#([\s\S]+?)\}\}/g, useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g, define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, defineParams: /^\s*([\w$]+):([\s\S]+)/, conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, varname: '$data', varoption: '$item', strip: true, append: true, selfcontained: false }, template: undefined, //fn, compile template compile: undefined //fn, for express }, global;
我修改完就是下面這樣的,很是簡單lua
var doT = { version: '1.0.1', templateSettings: { evaluate: /\{\%([\s\S]+?(\}?)+)\%\}/g, interpolate: /\{\%=([\s\S]+?)\%\}/g, encode: /\{\%!([\s\S]+?)\%\}/g, use: /\{\%#([\s\S]+?)\%\}/g, useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g, define: /\{\%##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\%\}/g, defineParams: /^\s*([\w$]+):([\s\S]+)/, conditional: /\{\%\?(\?)?\s*([\s\S]*?)\s*\%\}/g, iterate: /\{\%~\s*(?:\%\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\%\})/g, varname: '$data', varoption: '$item', strip: true, append: true, selfcontained: false }, template: undefined, //fn, compile template compile: undefined //fn, for express }, global;