我见过的主要差异是:
#if
,#unless
,#with
和#each
{{this}}
(输出当前项的字符串值)Handlebars.SafeString()
(可能还有其他一些方法)if !x ...
)(如果我对上述内容有误,请纠正我。)
我还缺少其他重大差异吗?
答案 0 :(得分:119)
你几乎已经钉了它,但是也可以编译Mustache模板。
Mustache缺少助手和更高级的块,因为它力求无逻辑。把手的自定义帮助程序非常有用,但最终会在模板中引入逻辑。
Mustache有许多不同的编译器(JavaScript,Ruby,Python,C等)。句柄始于JavaScript,现在有django-handlebars,handlebars.java,handlebars-ruby,lightncandy (PHP)和handlebars-objc等项目。
答案 1 :(得分:67)
小胡子专业人士:
小胡子:
Handlebars pros:
把手缺点:
来源:The client-side templating throwdown: mustache, handlebars, dust.js, and more
答案 2 :(得分:24)
两个图书馆接近范围的方式有一个微妙但重要的区别。如果在当前上下文中找不到变量,则Mustache将回退到父作用域;把手将返回一个空白字符串。
在GitHub自述文件中几乎没有提及,其中有一行代码:
Handlebars稍微偏离了Mustache,因为默认情况下它不会执行递归查找。
然而,如前所述,有一个标志可以使Handlebars的行为与Mustache相同 - 但它会影响性能。
这会影响您将#
变量用作条件的方式。
例如在Mustache中你可以这样做:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
它基本上意味着“如果变量存在并且是真实的,则打印带有变量的跨度”。但是在Handlebars中,你要么必须:
{{this}}
代替{{../variable}}
返回相关范围variable
对象variable
值
如果您需要,请详细了解here。
答案 3 :(得分:20)
注意: 此答案已过时。它在发布时确实如此,但不再是。
Mustache有多种语言的口译员,而Handlebars只有Javascript。
答案 4 :(得分:10)
它们之间的另一个区别是文件的大小:
要了解Handlebars.js的性能优势,我们必须使用预编译模板。
答案 5 :(得分:7)
另一个细微差别是{{#property}}...{{/property}}
块中的假值的处理。大多数小胡子实现只会在这里服从JS虚假,如果property
是''
或者&#39; 0&#39;则不会呈现阻止。
句柄将呈现''
和0
的阻止,而不是其他虚假值。迁移模板时,这可能会造成一些麻烦。
答案 6 :(得分:5)
我觉得“Handlebars”中提到的其中一个缺点不再“真正有效。”
Handlebars.java现在允许我们为客户端和服务器共享相同的模板语言,这对于具有1000多个需要服务器端呈现SEO的组件的大型项目来说是一个巨大的胜利
答案 7 :(得分:3)
- 除了使用&#34;这个&#34;对于把手,以及胡子变量块中的嵌套变量,您还可以使用块中的嵌套点来表示小胡子:
{{#variable}}<span class="text">{{.}}</span>{{/variable}}
答案 8 :(得分:0)