我正在将Backbone和Backbone.Marionette集成到现有的Web应用程序项目中。我们计划暂时保留项目中的所有现有功能,但我们将利用Backbone结构和Marionette主体的任何新功能。首要任务之一是确定HTML模板渲染库以及这些模板的数据绑定解决方案。以前,我们一直在使用JsRender和JsViews来满足我们的所有模板需求和数据绑定,但我们愿意为我们的新功能探索新的途径。所以基本上我一直在研究各种解决方案,现在需要一些建议或想法来选择什么。以下是我到目前为止所看到的内容:
优点:似乎遵循Backbone的关注点分离的想法,这有助于保持模板非常“干净”。
缺点:看起来您必须在视图中编写更多代码来定义绑定。此外,似乎缺乏进行条件渲染的能力,因此您必须始终渲染完整模板并切换某些元素的显示。
优点:在模板中处理更多数据绑定选项,而不会使其太乱。
缺点:此外,似乎缺乏条件渲染。
优点:通过属性处理各种数据绑定需求。
缺点:使用转换器轻松启动“弄脏”模板。必须添加另一个步骤来从Backbone模型创建Knockout视图模型。
优点:类似于Knockout的能力,但语法不同。处理条件渲染。
缺点:在过去,我们通过在模板中添加太多业务逻辑来弄脏我们的模板,但这可能是我们可以纠正的开发问题。需要创建将JsViews可观察性功能与Backbone模型事件联系起来的功能。像StickIt和Knockback这样的其他库自动处理这个问题。
我们还调查了Backbone.ModelBinder,它位于StickIt和Rivets之间。
任何人都可以分享他们做出的任何决定以及为什么他们选择一个插件/库而不是另一个插件/库?我也对其他建议持开放态度。感谢。
答案 0 :(得分:2)
我用过这些
Mustache.js
Pro's:小胡子不仅支持变量绑定,还可以处理函数绑定。例如,您可以拥有
<a href="{{test}}" >click me </a>
然后在您的视图中有一个名为test的方法。这样可以节省大量的rendundant分配类/ id来链接,并在View类中绑定事件。
Con's:我不喜欢它的语法。
接下来,我在Ruby on Rails中使用coffeescript,它在jst eco模板系统中构建。专家是,你有单独的文件模板。在页面加载时,它们将绑定到dom中的全局变量。这些是缩小的,并且比一些伪脚本模板标签更好。另一位专业人士是,你写的是if else和for循环就像你在ruby中所做的那样。缺点是,他们使用剃刀标签,不允许轻松混合使用服务器端代码(如翻译)。
其他图书馆正在强调模板引擎。很简单,但非常强大。 Proside,你已经有了它(骨干需要下划线)。缺点是,您不能(默认情况下)从外部文件加载模板。我已经通过使用服务器端代码(require_once,render partial)解决了这个问题。但是,如果您使用require.js和文本插件(http://requirejs.org/docs/download.html#text),那么您可以将模板作为依赖项加载。