【问题标题】:Backbone: Model-to-template and template-to-model bindingBackbone:模型到模板和模板到模型的绑定
【发布时间】:2013-02-08 17:02:46
【问题描述】:

我正在将 Backbone 和 Backbone.Marionette 集成到现有的 Web 应用程序项目中。我们计划暂时将所有现有功能留在项目中,但任何新功能我们都将利用 Backbone 结构化和 Marionette 原则。首要任务之一是确定 HTML 模板呈现库以及这些模板的数据绑定解决方案。以前,我们一直使用JsRenderJsViews 来满足我们所有的模板需求和数据绑定,但我们愿意为我们的新功能探索新的途径。所以基本上我一直在研究各种解决方案,现在需要一些关于选择什么的建议或想法。到目前为止,这是我所看到的:

Backbone.StickIt:

优点:似乎遵循 Backbone 的关注点分离理念,这有助于保持模板非常“干净”。

缺点:看起来您必须在视图中编写更多代码来定义绑定。此外,似乎缺乏进行条件渲染的能力,因此您必须始终渲染完整模板并仅切换某些元素的显示。

Rivets.js:

优点:在模板中处理更多数据绑定选项,而不会使模板过于混乱。

缺点:另外,似乎缺少条件渲染。

Knockback/Knockout:

优点:通过属性处理各种数据绑定需求。

缺点:使用转换器很容易开始“弄脏”模板。必须添加另一个步骤才能从 Backbone 模型创建 Knockout 视图模型。

JsViews:

优点:类似于 Knockout 的能力,但语法不同。处理条件渲染。

缺点:过去我们通过在模板中添加太多业务逻辑来弄脏我们的模板,但这可能是我们可以纠正的开发问题。需要创建功能以将 JsViews 可观察性功能与 Backbone 模型事件联系起来。 StickIt 和 Knockback 等其他库会自动处理此问题。

我们还研究了介于 StickIt 和 Rivets 之间的 Backbone.ModelBinder

谁能分享他们做出的任何决定以及他们为什么选择一个插件/库而不是另一个?我也愿意接受其他建议。谢谢。

【问题讨论】:

    标签: data-binding backbone.js template-engine marionette rivets.js


    【解决方案1】:

    我用过这些

    Mustache.js

    Pro's: mustache 不仅支持变量绑定,还可以处理函数绑定。例如,您可以拥有

    <a href="{{test}}" >click me </a>
    

    然后在你看来有一个方法叫做test。这样可以节省大量为链接分配类/ID 的冗余,并在视图类中绑定事件。

    缺点:我不喜欢它的语法。

    接下来我在 Ruby on Rails 中使用 coffeescript,它内置了 jst eco 模板系统。专业人士是,您将模板放在单独的文件中。在页面加载时,它们会绑定到 dom 中的全局变量。这些是缩小的,比一些伪脚本模板标签要好得多。另一个专业人士是,您编写 if else 和 for 循环,就像在 ruby​​ 中一样。缺点是,它们使用 razor 标签,并且不允许与服务器端代码轻松混合(如翻译)。

    其他库当然是下划线模板引擎。非常简单,但非常强大。 Proside,您已经可以使用它(主干需要下划线)。缺点是,您不能(默认情况下)从外部文件加载模板。我已经通过使用服务器端代码(require_once,渲染部分)解决了这个问题。但是,如果您使用 require.js 以及文本插件 (http://requirejs.org/docs/download.html#text),则可以将模板作为依赖项加载。

    【讨论】:

    • 我检查了下划线(有趣的是我没有考虑像你提到的那样包含它)。我觉得我们可能对“意大利面条”模板有同样的问题。主要问题是我们有许多开发人员在开发模板,并且我们开始将过多的逻辑和模板语法交织到 HTML 中。所以为了迫使我们放弃这个习惯,我们选择了 Backbone.Stickit。看起来需要一些时间来习惯在模板之外创建绑定,但希望我们能从 HTML 的“简洁”中受益。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2013-08-17
    相关资源
    最近更新 更多