把手添加了
#if
,#unless
,#with
和#each
把手添加了助手
把手模板已编译(
车把支持路径
允许在块中使用
{{this}}
(输出当前项目的字符串值)Handlebars.SafeString()
(以及其他一些方法) )车把的速度提高了2至7倍
小胡子支持倒置的部分(即
if !x ...
)(如果我对上述内容有误,请纠正我。)
我还有其他主要区别吗?
#1 楼
您已经钉上了钉子,但是还可以编译Mustache模板。Mustache缺少助手和更高级的块,因为它努力做到无逻辑。 Handlebars的自定义助手可能非常有用,但通常最终会在模板中引入逻辑。
Mustache具有许多不同的编译器(JavaScript,Ruby,Python,C等)。车把开始于JavaScript,现在有django-handlebars,handlebars.java,handlebars-ruby,lightncandy(PHP)和handlebars-objc等项目。
评论
不要忘记Scala-Handlebars实现Scandlebars!
–耳语者
2014年2月27日在15:14
Ruby的实现需要JavaScript解释器,因此它实际上不是Ruby编译器。
– eltiare
16年7月15日在20:24
#2 楼
Moustache的优点:在大型活跃社区中非常受欢迎。
支持多种语言(包括Java)的服务器端。
无逻辑模板效果很好迫使您将表示与逻辑分离的工作。
干净的语法会使模板易于构建,读取和维护。
胡子的缺点:
太缺乏逻辑了:基本任务(例如用不同的CSS类标记交替行)很困难。
视图逻辑通常被推回服务器或实现为“ lambda”(可调用函数)。
要使lambda能够在客户端和服务器上运行,必须使用JavaScript编写它们。
无逻辑模板做得很好迫使您将表示与逻辑分离。
干净的语法导致模板易于构建,读取和维护。
编译而不是解释的模板。
比胡须更好地支持路径(即深入上下文对象)。
比胡子更好地支持全局助手。
把手缺点:
需要服务器端JavaScript才能在服务器上呈现。
源:客户端模板丢弃:胡子,把手,ustust.js等
评论
Re Mustache con“有点太缺乏逻辑了”。我认为交替行CSS应该使用CSS伪类完成,例如tr:nth-child(even)和tr:nth-child(odd)或tr:nth-child(2n)。尽管这只是一个例子,但我觉得(大多数时候)如果小胡子有些困难或尴尬,那说明您做错了。有一个更好的地方。
–IAmNaN
15年2月27日在16:14
Handlebars也在Java上具有服务器站点实现github.com/jknack/handlebars.java
– UR6LAD
2015年11月25日上午10:59
@IAmNaN关于nth-child是公平的..除非您为电子邮件编写html,否则只能使用内联css-这使得使用nth选择器非常困难!
–迪伦·沃森(Dylan Watson)
19-09-15在14:25
#3 楼
两个库处理范围的方式之间存在一个细微但重要的区别。如果Moustache在当前上下文中找不到变量,它将回退到父范围。把手将返回一个空字符串。在GitHub README中几乎没有提到,其中只有一行:
把手与Mustache略有不同
默认情况下,它不执行递归查找。但是,如此处所述,有一个标志使Handlebars行为与Moustache相同-但会影响性能。
这会影响将
#
变量用作条件变量的方式。例如在Mustache中,您可以执行以下操作:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
它的基本意思是“如果变量存在并且是真实的,则打印其中包含该变量的跨度”。但是在车把中,您将必须:
使用
{{this}}
代替使用父路径,即
{{../variable}}
返回相关范围定义一个父级
variable
对象中的子级variable
值如果需要它们的更多详细信息,请在此处。
#4 楼
注意:此答案已过时。在发布时确实如此,但现在不再如此。Mustache拥有多种语言的解释器,而Handlebars仅是Javascript。
#5 楼
它们之间的另一个区别是文件的大小:Mustache.js的大小为9kb,
Handlebars.js的大小为86kb,如果使用预编译的模板则为18kb。
要查看Handlebars.js的性能优势,我们必须使用预编译的模板。
来源:JavaScript模板引擎概述
#6 楼
另一个微妙的区别是对{{#property}}...{{/property}}
块中的虚假值的处理。大多数胡须的实现在这里只会服从JS伪造,如果property
为''
或'0',则不会呈现该块。迁移模板时可能会造成一些麻烦。#7 楼
我觉得提到的“ Handlebars”缺点之一不再有效。Handlebars.java现在允许我们为客户端和服务器共享相同的模板语言,这对于大型公司来说是一个巨大的胜利。包含1000多个需要SEO服务器端渲染的组件的项目
看看https://github.com/jknack/handlebars.java
#8 楼
—除了将“ this”用于车把以及将变量块内的嵌套变量用于胡须之外,还可以将块中的嵌套点用于胡须: {{#variable}}<span class="text">{{.}}</span>{{/variable}}
评论
这也是比较这两个jsperf.com/dom-vs-innerhtml-based-templating/366的性能测试-还有更好的选择;)...而且我相信它是#each,而不是#list。
@ShadowCreeper谢谢。更新后的帖子。
我已经对此进行了深入的介绍,并在此处显示了如何为动态内容的超级基本javascript模板做类似的事情:http://stephentvedt.com/2013/09/23/html-templating-comparison/
我想知道谁接受了最后的编辑(2014-10-16)。应该是个答案。