将超级模型转换为内部模型

时间:2013-07-18 18:55:40

标签: backbone.js underscore.js

我有骨干模型层次结构,如

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重新创建集合。

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

    我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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...
   }
});