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 也是 Backbone 模型。

我想将 ModelB 和 ModelD 对象存储到 1 个集合中所以

我创建了像

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

这是我在做什么 -

  1. 我将 ModelA 对象存储到集合中

  2. 将集合转换为 json。

  3. 从 json 重新创建集合。

在这里,我从集合中获取 ModelA 对象,但想要特定类型的对象,例如 ModelB、ModelD 等。

我怎样才能做到这一点?

4

1 回答 1

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...
   }
});
于 2013-07-18T21:07:11.523 回答