1

フェッチされたときとは異なるデータがページの読み込み時に入力されるモデルのバックボーンコレクションがあります。

たとえば、ページの読み込み時に入力される属性は次のとおりです。

[{ 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 }]

古いデータを保持したまま、バックボーンコレクションを新しいデータで更新するにはどうすればよいですか?IDはサーバーから割り当てられません(名前は一意であることが保証されています)。

4

1 に答える 1

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バックボーンモデルオブジェクトで使用されている「id」プロパティを介してモデルを識別できるように、これを使用することが重要であることに注意してください。

于 2012-05-29T20:33:52.550 に答える