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);
  • 当嵌套模型(在StateController中)更改时,如何使HistoryController触发器更改

  • 如果散列发生了变化——我想更新我的状态模型——这些变化如何传播到嵌套模型?(不引起反馈回路)


  • 主干中的嵌套模型可能很棘手,因为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更改操作,从而再次更改嵌套模型,但我不知道您为什么要这样做