我有一个名为History的BackboneJS集合,它可以包含几个Backbone JS模型中的一个(从HistoryItem扩展而来自Backbone.Model),我试图找到一种方法在加载时重新创建,不幸的是,似乎BackboneJS集合只能指定在特定的模型,例如
- HistoryCollection = Backbone.Model.extend({
- model: app.models.HistoryItem
- })
我真正需要做的是确定每种类型,这是我想做的
- HistoryCollection = Backbone.Model.extend({
- model: function(item) {
- return app.models[item.type]; } })
解决方法
在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();});