我有一个Backbone模型集合,它们在页面加载时会有不同的数据,而不是在获取时。
例如,页面加载中的属性是:
[{ name: 'cat', color: 'yellow' },
{ name: 'dog', color: 'brown' },
{ name: 'fish', color: 'orange' }]
然后,在fetch()上(或者在页面存在时从服务器更新,数据看起来像:
[{ name: 'cat', current: 5, total: 100 },
{ name: 'dog', current: 6, total: 50 },
{ name: 'fish', current:7, total: 25 }]
如何在保留旧数据的同时使用新数据更新Backbone Collection?不从服务器分配ID(名称保证唯一)。
答案 0 :(得分:0)
我最终还是坚持了下去。这将更新存在的模型的属性,同时还删除未进入的模型并添加新模型。
Backbone.Collection.prototype.update = function(col_in){
var self = this,
new_models = [];
_(col_in).each(function(mod_in) {
var new_model = self._prepareModel(mod_in),
mod = self.get(new_model.id);
if (mod) {
new_models.push(mod.set(mod_in, {silent:true}));
} else {
new_models.push(mod_in);
}
});
this.reset(new_models);
};
注意使用_prepareModel
这很重要,这样可以通过Backbone Model对象中使用的任何“id”属性来识别模型。