js模版引擎笔记
<div>**JavaScript 模板引擎**
JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注。
**常见模板引擎**</div>[baiduTemplate(百度)\\](http://baidufe.github.io/BaiduTemplate/)[artTemplate(腾讯)\\](https://github.com/aui/artTemplate)[juicer(淘宝)\\](http://juicer.name/)[doT\\ ](https://github.com/olado/doT)[tmpl\\ ](https://github.com/BorisMoore/jquery-tmpl)[handlebars\\ ](http://handlebarsjs.com/)[easyTemplate\\ ](https://github.com/qitupstudios/easyTemplate)[underscoretemplate\\ ](http://documentcloud.github.io/underscore/)[mustache\\kissytemplate等。](https://github.com/janl/mustache.js)
兼容性、性能对比详情见,([各种JS模板引擎对比数据(高性能JavaScript模板引擎),我就不在多说了。](http://www.cnblogs.com/guohu/p/3870677.html)
**art-template**
----------------
javascript 模板引擎,官网:[https://github.com/aui/art-template](https://github.com/aui/art-template)
分为原生语法和简洁语法,本文主要是讲简洁语法
- 基础数据渲染
- 输出HTML
- 流程控制
- 遍历
- 调用自定义函数方法
- 子模板引入
### **基础数据渲染**
一、引入art-template.js文件
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">src</span></span>=<span class="hljs-tag"><span class="hljs-string">"template-debug.js"</span></span>></span><span class="undefined"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span></span>
```
二、编写HTML模板
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"test"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span></span></span><span class="xml">{{title}}</span><span><span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span></span>
```
三、向模板插入数据,并输出到页面
```
<span class="hljs-keyword">var</span> data = {
title:<span class="hljs-string">"hello world"</span>
};
<span class="hljs-keyword">var</span> html = template(<span class="hljs-string">"test"</span>,data);
<span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'content'</span>).innerHTML = html;
```
### 输出HTML
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"test"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span></span></span><span class="xml">{{title}}</span><span><span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span></span>
```
//注意:{{title}}这是对内容编码输出,应该写成{{#title}}这是对内容不编码输出
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"test"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span></span></span><span class="xml">{{#title}}</span><span><span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
var data = {
title:"<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">p</span></span>></span>hello world<span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">p</span></span>></span>"
};
var html = template("test",data);
document.getElementById('content').innerHTML = html;</span>
```
###
### **流程控制语句**(if else)
{{if value}} ... {{else if value}} ... {{else}} ... {{/if}}
流程控制就相对其他模板来说强大很多了,直接看例子
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"test"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{if bok==22}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span>线上<span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h1</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{else if bok==33}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h2</span></span></span><span class="hljs-tag">></span></span>隐藏<span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h2</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{else}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h3</span></span></span><span class="hljs-tag">></span></span>走这里<span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">h3</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{/if}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span>></span><span><span class="javascript">
</span><span class="javascript"><span class="hljs-keyword">var</span></span><span class="javascript"> data = {
</span><span class="javascript"><span class="hljs-string">"bok"</span></span>:<span class="javascript"><span class="hljs-number">22</span></span><span class="javascript">
};
</span><span class="javascript"><span class="hljs-keyword">var</span></span> html = template(<span class="javascript"><span class="hljs-string">'test'</span></span><span class="javascript">,data);
</span><span class="javascript"><span class="hljs-built_in">document</span></span>.getElementById(<span class="javascript"><span class="hljs-string">"app"</span></span><span class="javascript">).innerHTML = html;
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span></span>
```
### **循环遍历语句**
{{each name}} 索引:{{$index}} 值:{{$value}} {{/each}}
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"test"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{if c==100}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{each person}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">li</span></span></span><span class="hljs-tag">></span></span><span class="xml">
编号:</span></span></span><span class="xml">{{$index+1}}</span><span><span class="xml">--姓名:</span></span><span class="xml">{{$value.name}}</span><span><span class="xml">--年龄:</span></span><span class="xml">{{$value.age}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">li</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{/each}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{/if}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span>></span><span><span class="javascript">
</span><span class="javascript"><span class="hljs-keyword">var</span></span><span class="javascript"> data = {
c:</span><span class="javascript"><span class="hljs-number">100</span></span><span class="javascript">,
person:[
{name:</span><span class="javascript"><span class="hljs-string">"jack"</span></span>,age:<span class="javascript"><span class="hljs-number">18</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"tom"</span></span>,age:<span class="javascript"><span class="hljs-number">19</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"jerry"</span></span>,age:<span class="javascript"><span class="hljs-number">20</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"kid"</span></span>,age:<span class="javascript"><span class="hljs-number">21</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"jade"</span></span>,age:<span class="javascript"><span class="hljs-number">22</span></span><span class="javascript">}
]
};
</span><span class="javascript"><span class="hljs-keyword">var</span></span> html = template(<span class="javascript"><span class="hljs-string">"test"</span></span><span class="javascript">,data);
</span><span class="javascript"><span class="hljs-built_in">document</span></span>.getElementById(<span class="javascript"><span class="hljs-string">"content"</span></span><span class="javascript">).innerHTML = html;
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span></span>
```
嵌套的写法
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"test"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{if bok}}</span><span><span><span class="xml">
</span></span></span><span class="xml">{{if list.length>=0}}</span><span><span><span class="xml">
</span></span></span><span class="xml">{{each list}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">p</span></span></span><span class="hljs-tag">></span></span></span></span><span class="xml">{{$index}}</span><span><span class="xml">:</span></span><span class="xml">{{$value}}</span><span><span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">p</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{/each}}</span><span><span><span class="xml">
</span></span></span><span class="xml">{{else}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">p</span></span></span><span class="hljs-tag">></span></span>没有数据<span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">p</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{/if}}</span><span><span><span class="xml">
</span></span></span><span class="xml">{{/if}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span>></span><span><span class="javascript">
</span><span class="javascript"><span class="hljs-keyword">var</span></span><span class="javascript"> data = {
</span><span class="javascript"><span class="hljs-string">"bok"</span></span>:<span class="javascript"><span class="hljs-literal">true</span></span><span class="javascript">,
list:[</span><span class="javascript"><span class="hljs-string">"a"</span></span>,<span class="javascript"><span class="hljs-string">"b"</span></span>,<span class="javascript"><span class="hljs-string">"c"</span></span><span class="javascript">]
};
</span><span class="javascript"><span class="hljs-keyword">var</span></span> html = template(<span class="javascript"><span class="hljs-string">'test'</span></span><span class="javascript">,data);
</span><span class="javascript"><span class="hljs-built_in">document</span></span>.getElementById(<span class="javascript"><span class="hljs-string">"app"</span></span><span class="javascript">).innerHTML = html;
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span></span>
```
### **调用自定义方法**
通过template.helper(name,fnCallBack)注册方法
可以直接在{{}}中调用
```
<<span class="hljs-name">script id="test" type="text/html"></span><span class="xml">
<<span class="hljs-name">div></span>
{{if c==100}}
<<span class="hljs-name">ul></span>
{{each person}}
<<span class="hljs-name">li></span>姓名:{{$value.name}}--性别:{{show($value.sex)}}</<span class="hljs-name">li></span>
{{/each}}
</<span class="hljs-name">ul></span>
{{/if}}
</<span class="hljs-name">div></span>
</span></<span class="hljs-name">script></span>
<<span class="hljs-name">script></span><span class="javascript">
var data = {
c:100,
person:[
{name:"jack",age:18,sex:1},
{name:"tom",age:19,sex:0},
{name:"jerry",age:20,sex:0},
{name:"kid",age:21,sex:1},
{name:"jade",age:22,sex:0}
]
};
//自定义函数
template.defaults.imports.show=<span class="hljs-keyword">function(sex)</span>{
console.log(sex);//同样可以打印日志到控制台
if(sex==0){
return "男"
}else if(sex==1){
return "女"
}
};
var html = template("test",data);
document.getElementById("app").innerHTML = html;
</span></<span class="hljs-name">script></span>
```
### **调用子模板**
{{include 'main'}} 引入子模板,数据默认为共享 {{include 'main' a}} a为制定数据,但是同样必须是父级数据,可以看看下面的例子,如果不注入的a的话,引入的子模板是接受不到数据的
```
<span><span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">body</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">div</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"app"</span></span>></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">div</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">src</span></span>=<span class="hljs-tag"><span class="hljs-string">"template-debug.js"</span></span>></span><span class="undefined"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"main"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{each list}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">li</span></span></span><span class="hljs-tag">></span></span></span></span><span class="xml">{{$value}}</span><span><span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">li</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{/each}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span> <span class="hljs-tag"><span class="hljs-attr">id</span></span>=<span class="hljs-tag"><span class="hljs-string">"test"</span></span> <span class="hljs-tag"><span class="hljs-attr">type</span></span>=<span class="hljs-tag"><span class="hljs-string">"text/html"</span></span>></span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{each person}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"><</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">li</span></span></span><span class="hljs-tag">></span></span></span></span><span class="xml">{{$value.name}}</span><span><span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">li</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{/each}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">ul</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span></span><span class="xml">{{include 'main' a}}</span><span><span><span class="xml">
</span><span class="xml"><span class="hljs-tag"></</span><span class="xml"><span class="hljs-tag"><span class="hljs-name">div</span></span></span><span class="hljs-tag">></span></span><span class="xml">
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
<span class="hljs-tag"><<span class="hljs-tag"><span class="hljs-name">script</span></span>></span><span><span class="javascript">
</span><span class="javascript"><span class="hljs-keyword">var</span></span><span class="javascript"> data = {
person:[
{name:</span><span class="javascript"><span class="hljs-string">"jack"</span></span>,age:<span class="javascript"><span class="hljs-number">18</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"tom"</span></span>,age:<span class="javascript"><span class="hljs-number">19</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"jerry"</span></span>,age:<span class="javascript"><span class="hljs-number">20</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"kid"</span></span>,age:<span class="javascript"><span class="hljs-number">21</span></span><span class="javascript">},
{name:</span><span class="javascript"><span class="hljs-string">"jade"</span></span>,age:<span class="javascript"><span class="hljs-number">22</span></span><span class="javascript">}
],
a:{
list:[</span><span class="javascript"><span class="hljs-string">'文艺'</span></span>, <span class="javascript"><span class="hljs-string">'博客'</span></span>, <span class="javascript"><span class="hljs-string">'摄影'</span></span>, <span class="javascript"><span class="hljs-string">'电影'</span></span>, <span class="javascript"><span class="hljs-string">'民谣'</span></span>, <span class="javascript"><span class="hljs-string">'旅行'</span></span>, <span class="javascript"><span class="hljs-string">'吉他'</span></span><span class="javascript">]
}
};
</span><span class="javascript"><span class="hljs-keyword">var</span></span> html = template(<span class="javascript"><span class="hljs-string">"test"</span></span><span class="javascript">,data);
</span><span class="javascript"><span class="hljs-built_in">document</span></span>.getElementById(<span class="javascript"><span class="hljs-string">"app"</span></span><span class="javascript">).innerHTML=html;
</span></span><span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">script</span></span>></span>
<span class="hljs-tag"></<span class="hljs-tag"><span class="hljs-name">body</span></span>></span></span>
```
评论区