2014-03-12 21 views
0

松散说,在一个MVVM图案的各种部件是使用Backbone + Stickit时,视图模型对象是否需要扩展Backbone.Model?

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

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

如果我希望使用Stickit进行数据绑定,则看起来视图模型需要是Backbone.Model的实例。主要是因为绑定在Backbone.ViewBackbone.View的范围内工作,因此需要Backbone.Model对象作为视图的属性。另外,Backbone.Model引发了变化事件,而不是。我认为这将是很难观察一个POJO。再次,这是我通过阅读Stickit文档的理解。如果我错了,请纠正我。

一个Backbone.Model上有其他方法不从一个视图模型的点是有意义的,就像savefetch等我读了另一个MVVM库,Knockback。它可以将Backbone.Model转换为Knockout.js视图模型。除了传入完整的Backbone.Model之外,它还可以接受任何具有get/set方法并在属性发生更改时引发更改事件的POJO。

是否有Stickit有一个类似的合同,我可以通过一个POJO获取/设置方法并引发变化事件?建议的用法是什么?

回答

0

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

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

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

相关问题