-
Notifications
You must be signed in to change notification settings - Fork 0
/
wiki
60 lines (39 loc) · 2.49 KB
/
wiki
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Qunar使用的js模板引擎是twitter开发的hogan.js。
该引擎是Mustache模板语言的一个实现,所以模版语法和Mustache是完全相同的。
由于Mustache官方文档(链接)过于简单,所在我在这总结下hogan.js2.0.0的详细用法。
和以往的模版库不同,mustache提倡的是不在模版中写过多的逻辑,因此mustache只提供了标签tags,而没有if else for等语法。mustache默认以{{ }}做为标签标识符。
标签类型
1)变量(Variables)
语法:
{{viariableName}} 或{{propertyNameA.propertyNameB.propertyNameC...}}
用途:
输出变量值
eg:
变量求值时会在当前上下文对象中查找是否存在variableName这个属性。如果有则返回对应的值,如果没有会继续沿着下一层上下文查找。如果找到最外层上下文还没有这个属性,那就会返回空字符串。
variableNameA.variableNameB.variableNameC这种形式先会对variableNameA在上下文中进行查找,假设返回值为result,然后返回
result.variableNameB.variableNameC
eg:
所有变量的值默认都会进行html转义。如果你不想进行html转义,你可以使用{{{variableName}}}或{{& variableName}}
如果变量求值后是一个函数,那么引擎会调用这个函数,并以当前的上下文作为函数的this。以函数的返回值作为输出值。
eg:
2)区段(sections)
语法:
{{#variableName}}
...
{{/variableName}}
用途:
判断一个代码片段是否显示 或 数组遍历
variableName的求值过程和变量标签的求值过程相同
当用于判断代码片段时,返回值是false,'',空数组,区段标签内的代码片段不会显示。
都哪些值是false?
eg:
当用于数组遍历时,引擎会把当前遍历到的元素放入上下文栈中。
eg:
3)反向区端
语法:
{{^variableName}}{{/variableName}}
用途:
判断代码片段是否显示
只有当返回值是 代码片段才会显示
hogan.js2.0.0的上下文栈
引擎在把模版转换为实际html过程中会形成一个上下文栈。在转换开始,上下文栈中只有一个对象,就是我们调用hogan.render时传入的对象。当碰到区段标签开始标记时,如果解析值是数组,如果解析值是对象,则会把这个对象添加到栈顶,如果是基本类型,则会把上下文中顶部对象再次添加到栈顶。当遇到区段标签结束标记时,会把上下文栈中顶部上下文从上下文栈中移除。反向区段不影响上下文栈。