我看到的主要区别是:
#if
、#除非
、#with
和#each
{{this}}
(输出当前项的字符串值)Handlebar. SafeString()
(可能还有其他一些方法)if! x…
)(如果我对以上内容有错误,请指正。)
还有其他我遗漏的主要差异吗?
你已经基本搞定了,但是Mustache模板也可以编译。
Mustache缺少帮助程序和更高级的块,因为它努力做到无逻辑。Handlebar的自定义帮助程序可能非常有用,但最终往往会将逻辑引入您的模板。
Mustache有许多不同的编译器(JavaScript、Ruby、Python、C等)。Handlebar始于JavaScript,现在有django-handlebar、handlebars.java、handlebars-ruby、Lightn糖果(PHP)和handlebars-obc等项目。
胡子优点:
胡子缺点:
车把优点:
车把缺点:
来源:客户端模板下拉:胡子、车把、灰尘. js等
一个微妙但显着的区别在于两个库处理作用域的方式。如果在当前上下文中找不到变量,Mustache将回退到父作用域;句柄将返回一个空白字符串。
这在GitHub README中几乎没有提到,其中有一行:
Handlebar与Mustache略有不同,因为它默认不执行递归查找。
但是,如上所述,有一个标志可以使Handlebar的行为与Mustache相同——但它会影响性能。
这会影响您使用#
变量作为条件的方式。
例如,在Mustache中,您可以这样做:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
它基本上意味着“如果变量存在并且是真实的,则打印包含变量的跨度”。但在Handlebar中,您要么必须:
{{this}}
代替{{…/变量}}
回到相关范围变量
对象变量
值
如果你想要更多的细节,在这里。