doT.js 是一个独立的,简小快速的JS模版引擎
下载地址:https://github.com/olado/doT
1、渲染,模版中传入的变量引用,都需要通过 it.变量名 进行引用
var tempFn = doT.template("<h1>{{=it.title}}</h1>");
var resultHtml = tempFn({'title':'Hello world'});
其中,doT.template(tmpl,c,def) 函数支持3个参数:
- tmpl:模版代码
- c:配置参数,主要是实现自定义模版语法格式等,除非你像定制自己的模版风格,一般不去重定义。
- def:子模版列表,可以在模板中通过 {{#}} 嵌入使用
可传入的配置项以及默认值:
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: "it",
strip: true,
append: true,
selfcontained: false,
doNotSkipEncoded: false
传入子模版例:
var defPart = {"userItme":"<div>{{=it.name}} / {{=v.gender}}</div>"};
var partText = doT.template("<div><li>{{#userItme}}<li></div>",undefined,defPart);
$("#userInfot").html(data);
2、输出对象值以及默认值 {{=}}
<div>{{=name}} / {{=it.age || '18'}}</div>
3、输出编码话的变量值(<>等标记将被转化为html实体){{!}}
<div>{{!it.name}} / {{!it.note || '这家伙真懒,没有填写任何备注'}}</div>
4、循环数组 {{~}}
<form class="userlist">
<ul>
{{~it.users:v:k}}
<li>
{{= v.name }} / {{= v.gender }}
</li>
{{~}}
</ul>
</form>
5、判断 {{?}}
{{? v.gender=='m' }}
先生
{{?? v.gender=='w' }}
女士
{{??}}
保密
{{?}}
6、嵌入原生js代码 {{}}
<form class="userlist">
<ul>
{{ for(var k in it.user) { }}
<li>
{{= it.user[k].name }} / {{= it.user[k].gender }}
</li>
{{~}}
</ul>
</form>
7、模版嵌套 {{#}} {{##}}
{{##def.showGender:
{{? v.gender=='m' }}
先生
{{?? v.gender=='w' }}
女士
{{??}}
保密
{{?}}
#}}
<form class="userlist">
<ul>
{{~it.users:v:k}}
<li>
{{= v.name }} / {{#def.showGender}}
</li>
{{~}}
</ul>
</form>
模版嵌套支持多级嵌套,例如:
{{##def.showGender:
{{? v.gender=='m' }}
先生
{{?? v.gender=='w' }}
女士
{{??}}
保密
{{?}}
#}}
{{##def.userItem:
{{= v.name }} / {{#def.showGender}}
#}}
<form class="userlist">
<ul>
{{~it.users:v:k}}
<li>
{{#def.userItem}}
</li>
{{~}}
</ul>
</form>
除了在模板中使用 {{##}} 声明子模版外,还可以在渲染的时候,通过 doT.template 传参传入子模版列表。详情请参看说明1。
更多使用说明和示例,可参看:http://olado.github.io/doT/