使用Backbone + Stickit时,视图模型对象是否需要扩展Backbone.Model?

时间:2014-03-12 08:51:59

标签: backbone.js mvvm backbone-stickit

松散地说,MVVM模式中的各种组件都是

  • Model:这表示服务器发送的数据并发送回服务器。这不包含与UI显示相关的状态
  • ViewModel:这是由一个或多个模型构建的。这包含用于UI操作的状态(启用或禁用按钮)。用于UI操作的所有逻辑都存储在此处。该层不依赖于任何UI框架(没有jQuery调用)
  • View:这与UI框架/底层UI控件紧密耦合。一个视图观察一个且仅一个视图模型。可以通过一个或多个视图观察视图模型。该视图负责与视图模型进行双重绑定。
  • A presenter/coordinator:虽然不是传统实施的一部分,但在缺席的情况下,视图模型最终会产生过多的责任。这个人帮助协调制作ajax调用(获取/发布),监听全局事件聚合器等事件

Standalone Backbone没有视图模型和数据绑定的概念。在这种情况下,服务器返回的数据可以建模为Backbone.Model个对象。绑定是手动完成的,POJO可用于视图模型同步。

如果我希望使用Stickit进行数据绑定,则视图模型似乎必须是Backbone.Model的实例。主要是因为绑定在Backbone.ViewBackbone.View的上下文中工作,期望Backbone.Model对象作为视图的属性存在。此外,Backbone.Model引发了更改事件,而不是。我认为观察POJO会很困难。再次,这是我通过阅读Stickit文档的理解。如果我错了,请纠正我。

Backbone.Model还有其他方法,从视图模型的角度来看是没有意义的,例如savefetch等。我正在读书在另一个mvvm库Knockback上。它可以将Backbone.Model转换为Knockout.js视图模型。它还可以接受任何已获取/设置方法的POJO,并在属性发生变化时引发更改事件,而不是传递完整的Backbone.Model

Stickit是否有类似的合同,我可以传入一个已获取/设置方法并引发更改事件的POJO?推荐用法是什么?

1 个答案:

答案 0 :(得分:0)

Backbone.Stickit的源代码中没有任何内容要求模型实际上是Backbone.Model的实例。因此,看起来Stickit只需要一些支持Backbone.Model提供的契约的对象 - 我认为你需要的是set(),get()和on()的各种应用程序。

看看Stickit的test suite。如果您编写了自己的模型API,通过那些测试(通过在testScaffolding.js中用您自己的实现替换Backbone.Model - 并假设测试是彻底的 - 那么您应该能够将该模型与Stickit一起使用。

编辑:我可能没有直接解决这个问题。 Stickit只要求您在Backbone.View中使用它,并且该视图具有modeloptionalModel参数指定的其他对象,您可以将其传递给stickit()函数,符合Backbone.Model提供的合同。