【发布时间】:2011-10-04 12:16:05
【问题描述】:
使用 Backbone.js 让模型一直监听所有嵌套模型和集合的最佳模式是什么?
我应该将嵌套模型/集合放在属性中吗?我应该手动创建父母关系并触发事件吗?
【问题讨论】:
标签: javascript backbone.js coffeescript
使用 Backbone.js 让模型一直监听所有嵌套模型和集合的最佳模式是什么?
我应该将嵌套模型/集合放在属性中吗?我应该手动创建父母关系并触发事件吗?
【问题讨论】:
标签: javascript backbone.js coffeescript
与大多数 Backbone.js 一样,您不会得到“正确”的答案,但我可以分享一下我是如何做到的。对于模型和视图,我通常遵循以下准则:
视图和模型应该由对它们“负责”的组件实例化。对于具有明确父子关系的模型或视图,父模型应实例化,通常在initialize() 方法中。
在实例化时父母应该绑定到子事件。
父母应该“意识到”孩子,并且可以在必要时调用子方法 - 我通常会使用此方法而不是触发子事件,因为它更明确。我试图让孩子们独立于他们的父母,通过事件向上沟通。所以是的,深度嵌套的模型将通过事件链进行通信。
我有时将.set() 子属性作为主干属性,但通常只使用普通的 Javascript 属性(例如this.child)。这取决于上下文。使用 Backbone 属性提供了change 事件,因此如果您需要监视子项是否更改,请使用这些。骨干属性还使您能够在实例化时进行设置,例如var myModel = new Model({ other: otherModel }) - 但是因为父母通常会实例化他们的孩子,所以这并不真正适用于这种情况,我通常将该模式用于非分层模型 - 模型关系。在大多数情况下,我将孩子设置为纯 Javascript 属性。
【讨论】:
我真的很喜欢@nrabinowitz 的回答。他涵盖了所有正确的细节。
只是想放弃使用诸如 Backbone.Relational 之类的东西来为您处理所有这些东西的想法:https://github.com/PaulUithol/Backbone-relational
【讨论】: