2011-10-03 68 views

回答

14

和大多数Backbone.js一样,你不会得到一个“正确的”答案,但我可以分享我是如何做到的。对于模型和视图,我通常遵循以下指导原则:

  • 视图和模型应该由对其“负责”的组件实例化。对于具有明确的父/子关系的模型或视图,父模型应该实例化,通常在initialize()方法中。

  • 父母应该在实例化时绑定到子事件。

  • 父母应该“意识到”孩子,并且可以在必要时调用子方法 - 我通常会使用此方法来触发子事件,因为它更加明确。我尽量让孩子独立于父母,通过事件向上沟通。所以是的,深度嵌套模型会通过事件链进行沟通。

  • 我有时候会把.set()作为骨干属性,但通常只是使用简单的Javascript属性(例如this.child)。这取决于上下文。使用Backbone属性提供了change事件,因此如果您需要监视孩子是否更改,请使用这些。骨干属性还使您能够设置实例化时间,例如var myModel = new Model({ other: otherModel }) - 但是由于父母通常实例化他们的孩子,这并不适用于这种情况,我通常将该模式用于非等级模型 - 模型关系。在大多数情况下,我将孩子设置为简单的Javascript属性。

+0

很好的答案。明白,有不止一个规范的最佳方法 –

3

我真的很喜欢@nrabinowitz的答案。他涵盖了所有正确的细节。

只是想折腾出使用类似Backbone.Relational处理所有这些东西对你的想法:https://github.com/PaulUithol/Backbone-relational

+0

我最终有类似的问题,这个主干问题,任何想法?我想我可能会期望自动创建的模型有不同的行为? http://stackoverflow.com/questions/7685791/backbone-relational-events-not-firing – boom