提问者:小点点

Mustache. js和Handlebar.js有什么区别?


我看到的主要区别是:

  • 车把添加#if#除非#with#each
  • 车把增加助手
  • 车把模板被编译(小胡子也可以)
  • 车把支持路径
  • 允许在块中使用{{this}}(输出当前项的字符串值)
  • Handlebar. SafeString()(可能还有其他一些方法)
  • 车把快2到7倍
  • Mustache支持倒排部分(即if! x…

(如果我对以上内容有错误,请指正。)

还有其他我遗漏的主要差异吗?


共3个答案

匿名用户

你已经基本搞定了,但是Mustache模板也可以编译。

Mustache缺少帮助程序和更高级的块,因为它努力做到无逻辑。Handlebar的自定义帮助程序可能非常有用,但最终往往会将逻辑引入您的模板。

Mustache有许多不同的编译器(JavaScript、Ruby、Python、C等)。Handlebar始于JavaScript,现在有django-handlebar、handlebars.java、handlebars-ruby、Lightn糖果(PHP)和handlebars-obc等项目。

匿名用户

胡子优点:

  • 在大型活跃社区中非常受欢迎的选择。
  • 服务器端支持多种语言,包括Java。
  • 无逻辑模板可以很好地迫使您将表示与逻辑分开。
  • 干净的语法导致易于构建、阅读和维护的模板。

胡子缺点:

  • 有点过于缺乏逻辑:基本任务(例如,用不同的CSS类标记交替行)很困难。
  • 视图逻辑通常被推回到服务器或实现为“lambda”(可调用函数)。
  • 要使lambda在客户端和服务器上工作,您必须用JavaScript编写它们。

车把优点:

  • 无逻辑模板可以很好地迫使您将表示与逻辑分开。
  • 干净的语法导致易于构建、阅读和维护的模板。
  • 编译而不是解释的模板。
  • 比胡子更好地支持路径(即深入上下文对象)。
  • 对全球助手的支持比胡子更好。

车把缺点:

  • 需要服务器端JavaScript才能在服务器上呈现。

来源:客户端模板下拉:胡子、车把、灰尘. js等

匿名用户

一个微妙但显着的区别在于两个库处理作用域的方式。如果在当前上下文中找不到变量,Mustache将回退到父作用域;句柄将返回一个空白字符串。

这在GitHub README中几乎没有提到,其中有一行:

Handlebar与Mustache略有不同,因为它默认不执行递归查找。

但是,如上所述,有一个标志可以使Handlebar的行为与Mustache相同——但它会影响性能。

这会影响您使用#变量作为条件的方式。

例如,在Mustache中,您可以这样做:

{{#variable}}<span class="text">{{variable}}</span>{{/variable}}

它基本上意味着“如果变量存在并且是真实的,则打印包含变量的跨度”。但在Handlebar中,您要么必须:

  • 使用{{this}}代替
  • 使用父路径,即{{…/变量}}回到相关范围
  • 在父变量对象
  • 中定义一个子变量

如果你想要更多的细节,在这里。