Cha*_*son 321 templating-engine mustache client-side-templating handlebars.js
我见过的主要差异是:
#if
,#unless
,#with
,和#each
{{this}}
in块(输出当前项的字符串值)Handlebars.SafeString()
(也许还有其他一些方法)if !x ...
)(如果我对上述内容有误,请纠正我.)
我还缺少其他重大差异吗?
fro*_*uty 123
你几乎已经钉了它,但是也可以编译Mustache模板.
Mustache缺少帮助程序和更高级的块,因为它力求无逻辑.把手的自定义助手可能非常有用,但最终会在您的模板中引入逻辑.
Mustache有许多不同的编译器(JavaScript,Ruby,Python,C等).Handlebars开始于JavaScript,现在有django-handlebars,handlebars.java,handlebars-ruby,lightncandy(PHP)和handlebars-objc等项目.
Far*_*ini 69
小胡子职业:
小胡子缺点:
把手专业人士:
把手缺点:
guy*_*sey 23
一个微妙但重要的区别在于两个图书馆接近范围的方式.如果在当前上下文中找不到变量,则Mustache将回退到父作用域; 把手将返回一个空白字符串.
这在GitHub自述文件中几乎没有提及,其中有一行:
Handlebars略微偏离Mustache,因为默认情况下它不执行递归查找.
然而,如前所述,有一个标志可以使Handlebars的行为与Mustache相同 - 但它会影响性能.
这会影响您将#
变量用作条件的方式.
例如,在Mustache中,您可以这样做:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
Run Code Online (Sandbox Code Playgroud)
它基本上意味着"如果变量存在并且是真实的,则打印带有变量的跨度".但在Handlebars中,你要么必须:
{{this}}
替代{{../variable}}
返回相关范围variable
在父variable
对象中定义子值如果您需要,请在此处详细了解此信息.
Kev*_*sJr 22
注意: 此答案已过时.它在发布时确实如此,但不再是.
Mustache有多种语言的口译员,而Handlebars只有Javascript.
另一个细微差别是{{#property}}...{{/property}}
块中的虚假值的处理.大多数胡子实现只会服从JS虚假,而不是渲染块,如果property
是''
或'0'.
把手将呈现块''
和0
,而不是其他falsy值.迁移模板时,这可能会导致一些问题.
小智 5
\xe2\x80\x94除了对车把使用“this”,对胡子使用变量块中的嵌套变量外,还可以对胡子使用块中的嵌套点:
\n\n {{#variable}}<span class="text">{{.}}</span>{{/variable}}\n
Run Code Online (Sandbox Code Playgroud)\n
小智 5
我觉得"Handlebars"提到的缺点之一不再"真的有效".
Handlebars.java现在允许我们为客户端和服务器共享相同的模板语言,这对于具有1000多个需要服务器端呈现SEO的组件的大型项目来说是一个巨大的胜利
看看https://github.com/jknack/handlebars.java