使用Mustache和Backbone.js的优缺点是什么?

25

我正在学习backbone.js,为我正在开发的Rails 3应用程序而学习。Backbone使用underscore,我相信它有自己的模板引擎。

我已经读到了mustache的好处,但是想知道是否应该考虑使用它来替代underscore的内置模板引擎?

你的想法是什么?

谢谢

3个回答

32

我正在开发一个企业级的backbone应用程序,目前已经完成了一半。由于我学习时使用的是underscore,因此我目前使用它内置的模板。虽然我对此没有任何问题,但其他一些解决方案看起来更简洁,而且功能也更多一些。

我喜欢mustache的短语法,看起来更加简洁。但是,如果我要切换的话,我想我会选择Handlebars.js。

Handlebars具有相同的短语法,还有很多其他功能,比如自定义助手方法以及在模板中设置对象上下文等。你可以在这里查看。如果我在项目开始时就知道Handlebars,我肯定会选择它。

我不太担心添加另一个依赖项,正如其他人所提到的,正确使用Backbone应用程序将运行得非常快。 :D

如果您有任何其他问题,请告诉我。我一直很享受使用backbone,所以一直在关注标记的帖子。但说真的,Handlebars看起来真的很不错。

编辑:

我还想补充一点,即Handlebars的文档看起来比underscore的文档更加专业。


1
+1 对于文档的评价,下划线文档比许多其他引擎更糟糕。 - Sander
3
+1提到了Handlebars.js,我一定会去看一下!顺便问一下,有其他的程序员想要留长胡子来模仿handlebar mustache吗? - cbmeeks
再次感谢。你不仅给了我一个好的答案,还指引我了一种我从未听说过的替代方案。 - cbmeeks

18

我能想到的最大缺点是,你正在添加另一个库来完成已经由你的依赖项完成的工作。如果语法是您最大的关注点,则以下代码段将告诉underscore使用类似的语法。

_.templateSettings = {
  evaluate : /\{\[([\s\S]+?)\]\}/g,
  interpolate : /\{\{([\s\S]+?)\}\}/g
};

两个引擎之间没有其他大的区别吗?比如结构上或者功能上,一个只能在文本中使用变量,而另一个支持循环或嵌套模板或其他任何东西吗? - Sander
3
我知道的主要区别是 Mustache 使用语言无关的语法,并在多种语言中实现,因此您可以在前端和后端使用模板。 - JaredMcAteer
2
另一个区别是mustache是无逻辑的,这要求我们更严格地分离表现和代码。 - wprl
我个人倡导严格分离演示和代码。我认识到在某些情况下需要一些控制语句,并且使用underscore和控制语句使mustache语法正常工作的解决方法很混乱。 - JaredMcAteer

3
这个问题是关于Rails的,但没有标记,因此与使用mustache语法的语言(如django的模板)冲突是一个缺点。
如果django模板首先解析块,则会在编写JS之前尝试填充{{}}块。
我正在使用verbatim django模板标签来忽略{{}}块以解决这个问题,但现在我希望我使用默认的<%=%>语法,这样我就不必显式地转义在django模板引擎中编写的这些块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接