ドキュメントから
set メソッドは、渡されたモデルのリストを使用して、コレクションの「スマートな」更新を実行します。リスト内のモデルがまだコレクションにない場合は、追加されます。モデルがすでにコレクションにある場合、その属性はマージされます。リストにないモデルがコレクションに含まれている場合、それらは削除されます。
コレクションがIDに基づいてそれを識別するように、モデルに「idAttribute」を提供することも良い考えです。そうしないと、コレクションはモデルが新しいモデルかどうかを認識できません。
したがって、id を設定して を使用するとset
、 がスマート アップデートを実行することがわかります。
$(function () {
var MyModel = Backbone.Model.extend({
// This attribute should be set as a default
defaults: {
Name: ''
},
// Set the id attribute so that the collection
// know that it is the old model
idAttribute: 'id'
});
var Coll = Backbone.Collection.extend({
model: MyModel
});
var models = [{
Name: 'A',
id: 1
}, {
Name: 'B',
id: 2
}];
var collection = new Coll(models);
collection.bind('add', function (model) {
alert('addb')
});
collection.bind('remove', function () {
alert('add')
});
models = [{
Name: 'A',
id :1
}, {
Name: 'B',
id: 2
}, {
Name: 'C',
id: 3
}];
collection.add(models);
});
フィドルをチェック
残りの 2 つを削除しようとはしませんが、Backbone は、そのうちの 2 つが古いモデルであることを識別し、新しいモデルをコレクションにマージするのに十分なほどスマートです。