0

我想在一個Backbone模型中管理所有哈希狀態屬性(#)。用嵌套模型處理主幹狀態?

StateModel //Pseudo 
    attributes 
    layout : string 
    modelType1 : model 
    modelType2 : model 

這樣我就可以通過序列化這個單一模型來一致地更新歷史條目。

HistoryController 

    StateModel.bind("change", this.updateHistory); 
    [...] 
    state = StateModel.toJSON() 
    [...] 
    appRouter.navigate('v1' + state, false); 
  1. 如何讓HistoryController觸發變化時,嵌套模型(在StateController)變化?

  2. 如果哈希值變化 - 我想更新我的StateModel - 這些變化如何傳播到嵌套模型? (不會導致反饋迴路)

回答

1

Backbone中的嵌套模型可能會很棘手,因爲getter和setter方法沒有深度操作的內置功能。但是,我發現處理這個問題的最好方法是在其他Backbone模型中存儲Backbone模型。在你的例子中,你將實例化StateModel,然後將其modelType1和2設置爲TypeModel實例。然後您可以stateModel.get("modelType1").bind("change",this.updateHistory)stateModel.get("modelType2").bind("change",this.updateHistory)。或者,如果您要創建大量的TypeModels,則可以將此綁定放入初始化函數中。其次,您可以stateModel.get("modelType1").bind("change",stateModelInstance.updateFoo)或任何您希望在modelType模型更改時調用的方法。

這種模式的好處是,如果你需要stateModel來改變一個modelType模型,你可以做stateModel.set({modelType1:newModel3})或其他類似的東西。如果您在TypeModel的初始化程序中設置了綁定操作,則所有內容都將保持同步。如果你不想在變化時吹掉嵌套模型,只需要執行stateModel.get(「nestedModel1」).set({「foo」}:「bar」)。這應該不會導致反饋循環,除非您已將某些內容綁定到您的stateModel更改操作,該操作會再次更改嵌套模型,但我不知道爲什麼要這樣做。