Javascript 使用嵌套模型处理主干状态?
我希望在一个主干模型中管理所有哈希状态属性(#)Javascript 使用嵌套模型处理主干状态?,javascript,model-view-controller,backbone.js,fragment-identifier,Javascript,Model View Controller,Backbone.js,Fragment Identifier,我希望在一个主干模型中管理所有哈希状态属性(#) StateModel //Pseudo attributes layout : string modelType1 : model modelType2 : model 这样,我就可以通过序列化这个单一模型来持续更新历史记录条目 HistoryController StateModel.bind("change", this.updateHistory); [...] state = StateMode
StateModel //Pseudo
attributes
layout : string
modelType1 : model
modelType2 : model
这样,我就可以通过序列化这个单一模型来持续更新历史记录条目
HistoryController
StateModel.bind("change", this.updateHistory);
[...]
state = StateModel.toJSON()
[...]
appRouter.navigate('v1' + state, false);
主干中的嵌套模型可能很棘手,因为getter和setter方法没有内置的功能来进行深度操作。然而,我发现处理这个问题的最好方法是将主干模型存储在其他主干模型中。在您的示例中,您将实例化StateModel,然后将其modelType1和2设置为,例如,TypeModel实例。然后可以
stateModel.get(“modelType1”).bind(“更改”,this.updateHistory)
和stateModel.get(“modelType2”).bind(“更改”,this.updateHistory)
。或者,如果要创建许多类型模型,可以将此绑定放在初始值设定项函数中
其次,您可以stateModel.get(“modelType1”).bind(“change”,stateModelInstance.updatefo)
或在模型类型更改时希望调用的任何方法
这种模式的好处在于,如果需要stateModel更改其中一个modelType模型,可以执行stateModel.set({modelType1:newModel3})
之类的操作。如果您在TypeModel的ininitializer中设置了绑定操作,那么所有内容都将保持同步。如果您不想在更改时破坏嵌套模型,只需执行stateModel.get(“nestedModel1”).set({“foo”}:“bar”)。这不应该导致反馈循环,除非您已将某些内容绑定到stateModel更改操作,从而再次更改嵌套模型,但我不知道您为什么要这样做