我看到的主要区别是:
- 把手增加了
#if
,#unless
,#with
,和#each
- 把手添加助手
- 车把模板已编译(胡子也可以)
- 车把支撑路径
- 允许使用
{{this}}
in块(输出当前项目的字符串值) Handlebars.SafeString()
(也许还有其他方法)- 车把的速度提高了2至7倍
- 小胡子支撑倒立的部分(即
if !x ...
)
(如果我对以上内容有误,请纠正我。)
我还有其他主要差异吗?
我看到的主要区别是:
#if
,#unless
,#with
,和#each
{{this}}
in块(输出当前项目的字符串值)Handlebars.SafeString()
(也许还有其他方法)if !x ...
)(如果我对以上内容有误,请纠正我。)
我还有其他主要差异吗?
Answers:
您已经钉上了钉子,但是还可以编译Mustache模板。
小胡子缺少助手和更高级的方块,因为它努力做到无逻辑。车把的自定义助手可能非常有用,但通常最终会在模板中引入逻辑。
Mustache具有许多不同的编译器(JavaScript,Ruby,Python,C等)。车把开始于JavaScript,现在有django-handlebars,handlebars.java,handlebars-ruby,lightncandy(PHP)和handlebars-objc之类的项目。
小胡子的优点:
小胡子的缺点:
车把的优点:
车把的缺点:
tr:nth-child(even)
和tr:nth-child(odd)
或)来完成tr:nth-child(2n)
。尽管这只是一个例子,但我觉得(大多数时候)如果小胡子有些困难或尴尬,那说明您做错了。有一个更好的地方。
两个库处理范围的方式之间存在一个细微但重要的区别。如果Moustache在当前上下文中找不到变量,它将回退到父范围。车把将返回一个空白字符串。
GitHub自述文件中几乎没有提到这一点,其中只有一行:
车把与Moustache略有不同,因为它默认情况下不执行递归查找。
但是,如此处所述,有一个标志使车把的行为与“小胡子”相同,但会影响性能。
这会影响您将#
变量用作条件变量的方式。
例如,在Mustache中,您可以执行以下操作:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
它的基本含义是“如果变量存在并且是真实的,则打印其中包含变量的跨度”。但是在车把中,您要么必须:
{{this}}
代替{{../variable}}
回到相关范围variable
在父variable
对象中定义子值有关更多详细信息,如果需要,请在这里。
它们之间的另一个区别是文件的大小:
要查看Handlebars.js的性能优势,我们必须使用预编译的模板。
另一个细微的差异是对{{#property}}...{{/property}}
块中的虚假值的处理。大多数胡须实现在这里只会服从JS伪造,如果property
is ''
或'0' 则不会呈现该块。
把手将针对''
和渲染块0
,但不会渲染其他虚假值。迁移模板时可能会造成一些麻烦。
我觉得提到的“车把”缺点之一不再是真的有效。
Handlebars.java现在允许我们为客户端和服务器共享相同的模板语言,这对于具有1000多个需要SEO服务器端渲染的组件的大型项目来说是一个巨大的胜利
—除了将“ this”用于车把以及将变量块中的嵌套变量用于胡须之外,您还可以将块中的嵌套点用于胡须:
{{#variable}}<span class="text">{{.}}</span>{{/variable}}