我有一个名为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();});
原文地址:https://www.jb51.cc/js/150102.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。