具有特定类型的Backbone.Js集合

前端之家收集整理的这篇文章主要介绍了具有特定类型的Backbone.Js集合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为History的BackboneJS集合,它可以包含几个Backbone JS模型中的一个(从HistoryItem扩展而来自Backbone.Model),我试图找到一种方法在加载时重新创建,不幸的是,似乎BackboneJS集合只能指定在特定的模型,例如
  1. HistoryCollection = Backbone.Model.extend({
  2. model: app.models.HistoryItem
  3. })

我真正需要做的是确定每种类型,这是我想做的

  1. HistoryCollection = Backbone.Model.extend({
  2. model: function(item) {
  3. return app.models[item.type]; } })

在我分叉Backbone实现这个之前的任何想法? (即能够采用功能的集合模型属性)

解决方法

在firebug中玩耍……想出了一种方法,你可以覆盖收集的解析方法,而不是指定模型.您的解析实现基本上变成了一个简单的工厂,用于使用您想要的模型填充集合:
  1. var BaseModel = Backbone.Model.extend({
  2. meth: function(){ return 'Base method'; },});
  3.  
  4. var SubModel = BaseModel.extend({
  5. meth: function(){ return 'Sub1 method'; }
  6. });
  7.  
  8. var SubModel2 = BaseModel.extend({
  9. meth: function(){ return 'Sub2 method'; }
  10. });
  11.  
  12. var ModelCollection = Backbone.Collection.extend({
  13. parse: function(data){
  14. var self = this;
  15. data.forEach(function(item){
  16. switch(item.type){
  17. case 1:
  18. self.add(new SubModel(data));
  19. break;
  20. case 2:
  21. self.add(new SubModel2(data));
  22. break;
  23. default:
  24. self.add(new BaseModel(data))
  25. }
  26. });
  27. }
  28. });
  29.  
  30. //Example Use
  31. x = new ModelCollection;
  32. x.parse([{type: 1},{type: 2},{type: 99}]);
  33. x.map(function(e){ return e.meth();});

猜你在找的JavaScript相关文章