最近项目一直在使用Mustache.js前端模版,那么使用过程中一些语法顺便聊下。
Mustache简介
Mustache 是一个 logic-less (轻逻辑)模板解析引擎,它的优势在于可以应用在 Javascript、PHP、Python、Perl 等多种编程语言中。
语法
1 | {{keyName}} |
Mustache用法
可以直接下载引用或者npm安装使用;这里使用引用介绍:1
2
3
4
5
6
7
8<script type="text/javascript" src="mustache.js"></script>
var data = {
name: "Joe",
age:28
};
var tpl = '<div>My Name:{{Name}},Age:{{age}}</div>';
var html = Mustache.render(tpl, data); //后面省略渲染步骤直接输出结果集
console.log(html); //My Name:Joe,Age:28;
其中花括号就是Mustache标识符号,花括号中的名字表示键名;
Mustache循环语句
以#开始、以/结束表示区块,它会根据当前上下文中的键值来对区块进行一次或多次渲染,例如:1
2
3
4
5
6
7var data = {
"stooges": [
{ "name": "Moe" },
{ "name": "Larry" },
{ "name": "Curly" }
]
}
Template:
1 | {{#stooges}} |
输入结果:
1 | <b>Moe</b> |
1 | //{{^keyName}} {{/keyName}} |
1 | //{{.}}语法 表示枚举;可以循环输出整个数组,例如: |
Template:
1 | {{#musketeers}} |
输入结果:
1 | Athos |
函数节变量
如果节变量的值是一个函数,它将在每次迭代的列表中的当前项的上下文中调用,例如:1
2
3
4
5
6
7
8
9
10
11var data = {
"beatles": [
{ "firstName": "John", "lastName": "Lennon" },
{ "firstName": "Paul", "lastName": "McCartney" },
{ "firstName": "George", "lastName": "Harrison" },
{ "firstName": "Ringo", "lastName": "Starr" }
],
"name": function () {
return this.firstName + " " + this.lastName;
}
}
Template:
1 | {{#beatles}} |
输入结果:
1 | * John Lennon |
函数
如果一个节键的值是一个函数,它被称为节的文本块,未渲染,作为它的第一个参数。第二个参数是一个特殊的渲染函数,它使用当前视图作为视图参数。它在当前视图对象的上下文中调用。1
2
3
4
5
6
7
8var data = {
"name": "Tater",
"bold": function () {
return function (text, render) {
return "<b>" + render(text) + "</b>";
}
}
}
Template:
1 | {{#bold}}Hi {{name}}.{{/bold}} |
输入结果:
1 | <b>Hi Tater.</b> |
1 | //倒置部分^ {{}} {{部分代替#节}} |
Template:
1 | {{#repos}}<b>{{name}}</b>{{/repos}} |
输入结果:
1 | No repos :( |
1 | //{{>partials}}语法; |
Template:
1 | var tpl = "<h1>{{company}}</h1> <ul>{{>address}}</ul>" |
输入结果:
1 | <h1>Apple</h1> |
1 | //{{{keyName}}} 语法 |
Template:
1 | var tpl = '{{#address}} <p>{{{street}}}</p> {{/address}}' |
输入结果:
1 | <p>1 Infinite Loop Cupertino</br></p> |
1 | //{{!comments}}语法 |