我想在一个Backbone模型中管理所有哈希状态属性(#)。
StateModel //Pseudo
attributes
layout : string
modelType1 : model
modelType2 : model
这样我就可以通过序列化这个单一模型来不断更新历史条目。
HistoryController
StateModel.bind("change", this.updateHistory);
[...]
state = StateModel.toJSON()
[...]
appRouter.navigate('v1' + state, false);
当嵌套模型(在StateController中)发生变化时,如何更改HistoryController触发器?
如果哈希值发生变化 - 我想更新我的StateModel - 这些变化如何传播到嵌套模型? (不引起反馈循环)
答案 0 :(得分:1)
Backbone中的嵌套模型可能很棘手,因为getter和setter方法没有内置功能来深度操作。但是,我发现处理此问题的最佳方法是将Backbone模型存储在其他Backbone模型中。在您的示例中,您将实例化StateModel,然后将其modelType1和2设置为TypeModel实例。然后,您可以stateModel.get("modelType1").bind("change",this.updateHistory)
和stateModel.get("modelType2").bind("change",this.updateHistory)
。或者,如果您要创建大量的TypeModel,可以将此绑定放在初始化函数中。
其次,当modelType模型更改时,您可以stateModel.get("modelType1").bind("change",stateModelInstance.updateFoo)
或您想要调用的任何方法。
这个模式的好处是,如果你需要stateModel来改变一个modelType模型,你可以做stateModel.set({modelType1:newModel3})
或类似的东西。如果您已在TypeModel的ininitializer中设置了绑定操作,则所有内容都将保持同步状态。如果您不想在更改时吹掉嵌套模型,只需执行stateModel.get(“nestedModel1”)。set({“foo”}:“bar”)。这不应该导致反馈循环,除非你已经绑定了一些更改嵌套模型的stateModel更改操作,但我不知道为什么你会这样做。