文章目录
官方网站:
https://mustache.github.io/mustache.5.html
概要
mustache - Logic-less templates.
mustache - 无逻辑模板
经典的Mustache 模板:
Hello {{name}}
You have just won {{value}} dollars!
{{#in_ca}}
Well, {{taxed_value}} dollars, after taxes.
{{/in_ca}}
给定以下哈希值:
{
"name": "Chris",
"value": 10000,
"taxed_value": 10000 - (10000 * 0.4),
"in_ca": true
}
将产生以下内容:
Hello Chris
You have just won 10000 dollars!
Well, 6000.0 dollars, after taxes.
问题:产生逗号的原因
json的数据,需要拼接逗号,但是逗号出现的情况有多重
解决办法
{
{{#a}}
{{#b}}
,
{{/b}}
{{/a}}
{{#b}}
{{/b}}
}
描述
Mustache 可以用于HTML,配置文件,源代码-任何东西。它通过使用散列或对象中提供的值在模板中扩展标签来工作。
我们称其为“无逻辑”,因为没有if语句,else子句或for循环。相反,只有标签。有些标签被替换为一个值,有些则被替换为空,而另一些则被替换为一系列值。本文档介绍了Mustache标签的不同类型。
标签类型
标签由 double mustaches. {{person}} 是一个标签,和一样 {{#person}}. 在这两个示例中,我们将其person称为键或标记键。让我们谈谈不同类型的标签。
变数
最基本的标签类型是变量。一个 {{name}} 在一个基本的模板标签将尝试找到name在目前情况下键。如果没有name键,则将递归检查父上下文。如果到达最上层上下文并且name仍然找不到该键,则不会呈现任何内容。
默认情况下,所有变量都是HTML转义的。如果要返回未转义的HTML,请使用 triple mustache: {{{name}}}.
您还可以使用&取消转义变量: {{& name}}. 更改定界符时,这可能很有用(请参见下面的“设置定界符”)。
默认情况下,变量“ miss”返回空字符串。通常可以在您的Mustache库中进行配置。例如,Mustache的Ruby版本支持在这种情况下引发异常。
模板 Template:
* {{name}}
* {{age}}
* {{company}}
* {{{company}}}
Hash:
{
"name": "Chris",
"company": "<b>GitHub</b>"
}
输出 Output:
* Chris
*
* <b>GitHub</b>
* <b>GitHub</b>
栏目Sections
部分根据当前上下文中键的值,将文本块渲染一次或多次。
一段以井号开始,以斜杠结束。也就是说, {{#person}} begins a “person” section while {{/person}} ends it.
该部分的行为由键的值确定。
假值或空列表
如果person键存在并且值为false或空白列表,则不会显示井号和斜杠之间的HTML。
模板 Template:
Shown.
{{#person}}
Never shown!
{{/person}}
Hash:
{
"person": false
}
输出 Output:
Shown.
非空清单
如果person键存在并且具有非false值,则井号和斜杠之间的HTML将被渲染并显示一次或多次。
当值是非空列表时,对于列表中的每个项目,块中的文本将显示一次。每次迭代时,块的上下文将被设置为当前项。这样我们就可以遍历集合。
模板 Template:
{{#repo}}
<b>{{name}}</b>
{{/repo}}
Hash:
{
"repo": [
{ "name": "resque" },
{ "name": "hub" },
{ "name": "rip" }
]
}
输出 Output:
<b>resque</b>
<b>hub</b>
<b>rip</b>
Lambdas
When the value is a callable object, such as a function or lambda, the object will be invoked and passed the block of text. The text passed is the literal block, unrendered. {{tags}} will not have been expanded - the lambda should do that on its own. In this way you can implement filters or caching.
模板:Template:
{{#wrapped}}
{{name}} is awesome.
{{/wrapped}}
Hash:
{
"name": "Willy",
"wrapped": function() {
return function(text, render) {
return "<b>" + render(text) + "</b>"
}
}
}
输出 Output:
<b>Willy is awesome.</b>
非假值 Non-False Values
当该值是非false而不是列表时,它将用作块的单个呈现的上下文。
模板:Template:
{{#person?}}
Hi {{name}}!
{{/person?}}
Hash:
{
"person?": { "name": "Jon" }
}
输出 Output:
Hi Jon!
Inverted Sections 倒段
倒置的部分以尖号(帽子)开始,以斜线结束. That is {{^person}} begins a “person” inverted section while {{/person}} ends it.
section可用于根据键的值一次或多次呈现文本,相反的section可根据键的逆值呈现文本一次。也就是说,如果键不存在、为false或列表为空,则将呈现它们。
模板:Template:
{{#repo}}
<b>{{name}}</b>
{{/repo}}
{{^repo}}
No repos :(
{{/repo}}
Hash:
{
"repo": []
}
输出:Output:
No repos :(
注释:Comments
注释一开始就会被忽略。以下模板:
<h1>Today{{! ignore me }}.</h1>
将呈现如下:
<h1>Today.</h1>
评论中可能包含换行符。
部分:Partials
偏号以大于号开头,例如 {{> box}}.
部分是在运行时呈现的(与编译时相反),因此递归部分是可能的。只是避免无限循环。
它们还继承了调用上下文。而在[ERB](http://en.wikipedia.org/wiki/ERuby)文件中,您可能会这样:
<%= partial :next_more, :start => start, :size => size %>
Mustache 只需要这样:
{{> next_more}}
为什么?因为该next_more.mustache文件将从调用上下文中继承size和 start方法。
通过这种方式,您可能会想将部分视为包括,导入,模板扩展,嵌套模板或子模板,即使这些从字面上看并非如此。
例如,此模板和部分模板:
base.mustache:
<h2>Names</h2>
{{#names}}
{{> user}}
{{/names}}
user.mustache:
{{name}}
可以认为是单个扩展模板:
<h2>Names</h2>
{{#names}}
<strong>{{name}}</strong>
{{/names}}
设置定界符Set Delimiter
Set Delimiter标签以等号开头,并将标签定界符从{{和更改}}为自定义字符串。
考虑以下人为的示例:
* {{default_tags}}
{{=<% %>=}}
* <% erb_style_tags %>
<%={{ }}=%>
* {{ default_tags_again }}
在这里,我们列出了三个项目。第一项使用默认标记样式,第二项使用Set Delimiter标记定义的erb样式,第三项在另一个Set Delimiter声明之后返回默认样式。
根据ctemplates的说法,“这对于TeX这样的语言很有用,因为TeX可能在文本中出现双括号,并且很难用于标记。”
自定义定界符不得包含空格或等号。
Custom delimiters may not contain whitespace or the equals sign.
COPYRIGHT
Mustache is Copyright © 2009 Chris Wanstrath
Original CTemplate by Google