2013-08-06 84 views
2

我有一個骨幹collection.I想添加或刪除集合中動態的一些模型。但是,如果我使用collection.set()方法,那麼它將首先刪除所有元素,然後再次添加所有元素。Backbone Collection設置方法刪除現有元素,然後添加所有元素

我想要做的是爲那些真正新添加的觸發器添加事件集合,並觸發刪除那些從以前的集合中刪除的事件。

這裏是一個例子[http://jsfiddle.net/PkJCx/2/]

回答

1

從文檔

設定方法執行集合的「智能」更新與 通過了模型列表。如果列表中的某個模型尚未處於 集合中,則會添加它;如果該模型已經在集合 中,則其屬性將被合併;如果該集合包含任何不在列表中的 模型,它們將被刪除。

爲模型提供`idAttribute'以便集合標識基於id的標識也是一個好主意。否則,該集合將不知道該模型是否是新模型。

所以設置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); 
}); 

Check Fiddle

它不會嘗試刪除其他2,但主幹很聰明足以確定其中的2個是舊模型,然後將新的模型合併到集合中。

+0

哇......它對我真的很有幫助...非常感謝Sushanth .. :-) – user2058320

+0

@ user2058320 ..不客氣:) –

+1

@ Sushanth--我覺得你甚至不需要設置在你的情況下,idAttribute,因爲你明確地在你的模型中使用id。 –