2012-08-25 40 views
0

我想從一個集合中刪除一個模型:如何從一個Backbone.Collection刪除模型

var item = new Backbone.Model({ 
    id: "01", 
    someValue: "blabla", 
    someOtherValue: "boa" 
}); 

var list = new Backbone.Collection([item]); 

list.get("01").destroy(); 

結果:

產品仍是骨幹陣列中....

回答

2

您還應該從集合中刪除模型。

var model = list.get('01'); 
model.destroy(); 
list.remove(model); 
2

我對接受的答案有所保留。當一個模型被銷燬時,這個「銷燬」事件會通過模型所在的任何集合冒泡。因此,當你銷燬一個模型時,你不應該從列表中刪除這個模型。

model.destroy(); 

應該足夠了。

看你的代碼看起來正確的:(如果目的是摧毀+刪除,而不只是刪除)

list.get('01').destroy(); 

你確定你的資源是越來越正確銷燬?你有沒有嘗試在你的destroy()調用中放置一個成功和錯誤回調以確保執行銷燬?例如,如果您的模型URL不正確並且無法訪問資源,那麼destroy調用將返回一個錯誤,您的集合仍然會有該模型。這會顯示你在你的問題中概述的症狀。

通過在銷燬調用之後放置remove(),您的集合將一定刪除該模型。但是這種模式仍然存在(仍然存在)。這可能是你想要的,但是因爲你在調用destroy(),我假設你想完全消除它。如果是這種情況,雖然刪除似乎工作,但它實際上做的是掩蓋您的模型已被銷燬,但事實上它可能不會。

因此,這是我有一種感覺實際上正在發生。有些東西阻止了模型的銷燬。這就是爲什麼當你調用destroy(),然後檢查你的集合 - 模型仍然存在。

雖然我可能是錯的。你能檢查一下並更新你的發現嗎?