覆盖Backbone Collection上的解析函数

时间:2014-01-16 03:51:24

标签: javascript json backbone.js

我有一个骨干系列:

var user = new Backbone.Collection.extend({
  url: '/user',

  parse: function (response) {
    return response.lunch;
    return response.dinner;
  }
});

返回一个像这样的json:

[ 
  {
lunch: [{
 appetizer : 'bagel',
 maincourse: 'steak',
 desert: 'sweets'
}]
},
{
dinner: [{
 appetizer : 'chips',
 main: 'rice',
 desert: 'sweets'
 }]
}
]

我想结合response.lunch和response.dinner并有一个共同的集合:我试过:

parse: function (response) {
     var collection1 = response.lunch;
     var collection2 = response.dinner;
     return collection1.add(collection2.toJSON(), {silent : true});
   }

但它不起作用。另外我如何使用maincourse覆盖所有主要功能?我试过了:

this.collection.each(function(model) {
  var a = model.get("main");
  model.set({a: "maincourse"});
   }

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我猜你要合并lunchdinner,这样你的收藏就会以{ appetizer : 'bagel', ... }{ appetizer : 'chips', ... }结尾。如果是这样,那么只需将concat两个数组放在一起:

parse: function(response) {
    return response.lunch.concat(response.dinner);
}

如果您要将所有main属性重命名为maincourse,那么您需要使用get来提取mainunset删除它们,然后set将它们放回新名称:

var maincourse = model.get('main');
model.unset('main', { silent: true });
model.set('maincourse', maincourse, { silent: true });

或直接编辑attributes

model.attributes.maincourse = model.attributes.main;
delete model.attributes.main;

或更好,只需在parse方法中重命名该属性。