Backbone.js:使用不同数据更新集合

时间:2012-05-25 06:11:05

标签: javascript backbone.js backbone.js-collections

我有一个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(名称保证唯一)。

1 个答案:

答案 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”属性来识别模型。