2013-07-18 29 views
0

我有骨氣的層次模型像轉換超級模特到內部模型

ModelA = Backbone.Model.extend({ 
    initialize : function(){ 
     this.set("prop1",10); 
    } 
}); 

ModelB = ModelA.extend({ 
    this.set("prop2",new ModelC()) 
}); 
ModelD = ModelA.extend({ 
    this.set("prop3",new ModelE()) 
}); 

ModelC和MODELE也是骨幹機型。

我想存儲ModelB和ModelD對象到1個集所以

我創建的集合像

collection = Backbone.Collection({ 
    model : ModelA 
}); 

在這裏,我在做什麼 -

  1. 我存儲MODELA對象轉換成集合

  2. 將集合轉換爲json。

  3. 從json重新創建集合。

在這裏,我正從收集MODELA對象,但要特定類型的對象,如ModelB,ModelD等

我怎樣才能做到這一點?

+0

爲什麼不只是增加一個額外的屬性模型,指定類型(「ModelA」,「ModelB」等)? – McGarnagle

+0

@McGarnagle你會失去在子模型中定義的任何額外的函數。 – Andrew

回答

1

你就可以欺騙成創建正確的型號爲@McGarnagle說通過提供一個指定的類型,然後指定一個自定義構造函數您的收藏屬性,

collection = Backbone.Collection({ 
    model : function(attrs, options){ 
     if(!attrs || !attrs.modelType) 
      return new ModelA(attrs, options) 

     if(attrs.modelType === 'ModelB') 
      return new ModelB(attrs, options) 

     //etc... 
    } 
});