我发现的主要区别是:
Handlebars添加了#if, #unless, #with和#each Handlebars添加helper 编译了车把模板(小胡子也可以) 手柄支持路径 允许在块中使用{{this}}(输出当前项的字符串值) Handlebars.SafeString()(可能还有其他一些方法) 把手的速度快2到7倍 胡子支持倒立部分(即if !x…)
(如有错误,请指正。)
还有其他我忽略的主要区别吗?
我发现的主要区别是:
Handlebars添加了#if, #unless, #with和#each Handlebars添加helper 编译了车把模板(小胡子也可以) 手柄支持路径 允许在块中使用{{this}}(输出当前项的字符串值) Handlebars.SafeString()(可能还有其他一些方法) 把手的速度快2到7倍 胡子支持倒立部分(即if !x…)
(如有错误,请指正。)
还有其他我忽略的主要区别吗?
当前回答
一个更微妙的区别是在{{#property}}中处理假值…{{/财产}}。大多数mustache实现在这里会遵循JS的错误,如果属性为"或'0',则不呈现块。
句柄将呈现“和0”的块,但不会呈现其他虚假值。这可能会在迁移模板时带来一些麻烦。
其他回答
我觉得其中一个提到的缺点“把手”不是真的有效了。
java现在允许我们为客户端和服务器端共享相同的模板语言,这对于拥有1000多个组件的大型项目来说是一个巨大的胜利,这些组件需要为SEO提供服务器端渲染
看看https://github.com/jknack/handlebars.java
一个微妙但重要的区别是这两个库处理作用域的方式。如果Mustache在当前上下文中找不到变量,它将退回到父作用域;句柄将返回一个空字符串。
这在GitHub README中几乎没有提到,其中有一行用于它:
Handlebars与Mustache略有不同,因为默认情况下它不执行递归查找。
然而,正如上面所提到的,有一个标志可以使Handlebars的行为与Mustache相同,但它会影响性能。
这对使用#变量作为条件的方式有影响。
例如,在Mustache中你可以这样做:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
它基本上意味着“如果变量存在并且为真,则打印包含变量的span”。但在Handlebars中,你要么必须:
请改用{{this}} 使用父路径,例如,{{../variable}}返回到相关范围 在父变量对象中定义子变量值
更多的细节,如果你想要,这里。
一个更微妙的区别是在{{#property}}中处理假值…{{/财产}}。大多数mustache实现在这里会遵循JS的错误,如果属性为"或'0',则不呈现块。
句柄将呈现“和0”的块,但不会呈现其他虚假值。这可能会在迁移模板时带来一些麻烦。
你已经完成了很多,但是Mustache模板也可以编译。
Mustache缺少帮助程序和更高级的模块,因为它努力做到无逻辑。句柄的自定义助手可能非常有用,但通常会在模板中引入逻辑。
Mustache有许多不同的编译器(JavaScript、Ruby、Python、C等)。Handlebars开始于JavaScript,现在有像django-handlebars, Handlebars .java, Handlebars -ruby, lightncandy (PHP)和Handlebars -objc这样的项目。
它们之间的另一个区别是文件的大小:
Mustache.js有9kb, Handlebars.js有86kb,如果使用预编译的模板则为18kb。
为了看到Handlebars.js的性能优势,我们必须使用预编译的模板。
来源:JavaScript模板引擎概述