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