我有一个名为 History 的 BackboneJS 集合,它可以包含多个 Backbone JS 模型之一(从 HistoryItem 扩展,而 HistoryItem 又从 Backbone.Model 扩展),我试图找到一种在加载时重新创建它的方法,不幸的是,BackboneJS 集合似乎只能指定在特定型号,例如
HistoryCollection = Backbone.Model.extend({
model: app.models.HistoryItem
})
我真正需要做的是确定每种类型,这就是我想做的
HistoryCollection = Backbone.Model.extend({
model: function(item) {
return app.models[item.type]; } })
在我分叉 Backbone 来实现这个之前有什么想法吗? (即集合模型属性能够接受函数)
在 firebug 中玩弄......想出了一种方法,您可以覆盖集合的解析方法而不是指定模型。您的解析实现基本上成为一个简单的工厂,用于用您想要的模型填充集合:
var BaseModel = Backbone.Model.extend({
meth: function(){ return 'Base method'; },
});
var SubModel = BaseModel.extend({
meth: function(){ return 'Sub1 method'; }
});
var SubModel2 = BaseModel.extend({
meth: function(){ return 'Sub2 method'; }
});
var ModelCollection = Backbone.Collection.extend({
parse: function(data){
var self = this;
data.forEach(function(item){
switch(item.type){
case 1:
self.add(new SubModel(data));
break;
case 2:
self.add(new SubModel2(data));
break;
default:
self.add(new BaseModel(data))
}
});
}
});
//Example Use
x = new ModelCollection;
x.parse([{type: 1},{type: 2}, {type: 99}]);
x.map(function(e){ return e.meth();});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)