是否有一种干净的方法可以在运行时更改Backbone集合的模型?换句话说,我有一个名为BaseCollection
的集合,默认情况下,它的模型称为BaseModel
。该模型充当其他模型的基类。说AModel
,BModel
等
现在,在运行时,基于特定参数的集合需要了解是否必须调用parse
或BaseModel
之一的parse
方法(具有特定覆盖)从BaseModel
扩展的模型中使用的方法。
通常,每次实例化时都可以简单地扩展集合。因此,例如,默认情况下定义如下。
var BaseCollection = Backbone.Collection.extend({
model : BaseModel,
// other stuff here
});
现在,如果我想要一个AModel
必须是model
BaseCollection.extend( { model: AModel } );
这里有复杂的东西。如果集合不包含相同类型的模型,该怎么办?换句话说,如果BaseCollection
包含AModel
s,BModel
等,该怎么办?请注意,我需要为每个模型调用parse
方法,因为它们略有不同。
答案 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);
}
}
});
在您的情况下,您应该使用属性来决定要创建的模型