官方网站:
https://mustache.github.io/mustache.5.html
mustache - Logic-less templates.
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版本支持在这种情况下引发异常。
* {
{name}}
* {
{age}}
* {
{company}}
* {
{
{company}}}
Hash:
{
"name": "Chris",
"company": "GitHub"
}
* Chris
*
* <b>GitHub</b>
* GitHub
部分根据当前上下文中键的值,将文本块渲染一次或多次。
一段以井号开始,以斜杠结束。也就是说, { {#person}} begins a “person” section while { {/person}} ends it.
该部分的行为由键的值确定。
假值或空列表
如果person键存在并且值为false或空白列表,则不会显示井号和斜杠之间的HTML。
Shown.
{
{#person}}
Never shown!
{
{/person}}
Hash:
{
"person": false
}
Shown.
如果person键存在并且具有非false值,则井号和斜杠之间的HTML将被渲染并显示一次或多次。
当值是非空列表时,对于列表中的每个项目,块中的文本将显示一次。每次迭代时,块的上下文将被设置为当前项。这样我们就可以遍历集合。
{
{#repo}}
{
{name}}
{
{/repo}}
Hash:
{
"repo": [
{ "name": "resque" },
{ "name": "hub" },
{ "name": "rip" }
]
}
resque
hub
rip
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.
{
{#wrapped}}
{
{name}} is awesome.
{
{/wrapped}}
Hash:
{
"name": "Willy",
"wrapped": function() {
return function(text, render) {
return "" + render(text) + ""
}
}
}
Willy is awesome.
当该值是非false而不是列表时,它将用作块的单个呈现的上下文。
{
{#person?}}
Hi {
{name}}!
{
{/person?}}
Hash:
{
"person?": { "name": "Jon" }
}
Hi Jon!
倒置的部分以尖号(帽子)开始,以斜线结束. That is { {^person}} begins a “person” inverted section while { {/person}} ends it.
section可用于根据键的值一次或多次呈现文本,相反的section可根据键的逆值呈现文本一次。也就是说,如果键不存在、为false或列表为空,则将呈现它们。
{
{#repo}}
{
{name}}
{
{/repo}}
{
{^repo}}
No repos :(
{
{/repo}}
Hash:
{
"repo": []
}
No repos :(
注释一开始就会被忽略。以下模板:
Today{
{! ignore me }}.
将呈现如下:
Today.
评论中可能包含换行符。
偏号以大于号开头,例如 { {> 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:
Names
{
{#names}}
{
{> user}}
{
{/names}}
user.mustache:
{ {name}}
可以认为是单个扩展模板:
Names
{
{#names}}
{
{name}}
{
{/names}}
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