是否可以在运行时更改Backbone.Collection的模型

时间:2014-01-08 10:47:06

标签: javascript backbone.js collections

是否有一种干净的方法可以在运行时更改Backbone集合的模型?换句话说,我有一个名为BaseCollection的集合,默认情况下,它的模型称为BaseModel。该模型充当其他模型的基类。说AModelBModel

现在,在运行时,基于特定参数的集合需要了解是否必须调用parseBaseModel之一的parse方法(具有特定覆盖)从BaseModel扩展的模型中使用的方法。

通常,每次实例化时都可以简单地扩展集合。因此,例如,默认情况下定义如下。

var BaseCollection = Backbone.Collection.extend({

    model : BaseModel,

    // other stuff here
});

现在,如果我想要一个AModel必须是model

的集合
BaseCollection.extend( { model: AModel } );

这里有复杂的东西。如果集合不包含相同类型的模型,该怎么办?换句话说,如果BaseCollection包含AModel s,BModel等,该怎么办?请注意,我需要为每个模型调用parse方法,因为它们略有不同。

1 个答案:

答案 0 :(得分:3)

创建不同模型集合的magic是通过实现model函数。

以下是http://backbonejs.org/#Collection-model

中的示例
var Library = Backbone.Collection.extend({

  model: function(attrs, options) {
    if (condition) {
      return new PublicDocument(attrs, options);
    } else {
      return new PrivateDocument(attrs, options);
    }
  }
});

在您的情况下,您应该使用属性来决定要创建的模型