2014-10-05 65 views
1

如何刪除我的集合中的所有模型(保留在本地存儲中)?銷燬Backbone集合中的所有模型(堅持本地存儲)

模型從本地存儲中獲取 - 我希望模型在客戶端和本地存儲都被銷燬。

// Model + Collection 
App.Models.Task = Backbone.Model.extend({ 
    defaults: { 
     text: 'N/A' 
    } 
}); 

App.Collections.Tasks = Backbone.Collection.extend({ 
    model: App.Models.Task, 
    localStorage: new Backbone.LocalStorage("task") 
}); 


// Create collection and fetch tasks 
var tasks = new App.Collections.Tasks(); 
tasks.fetch(); // collection is now populated with 4 tasks 


// Delete all models (both at client and local storage) 
tasks.each(function(model) { 
    model.destroy(); 
}) 

運行此,我只破壞一些機型 - 此錯誤發生,並防止其他被破壞:

Uncaught TypeError: Cannot read property 'destroy' of undefined 

任何幫助是非常感謝!

+0

如果它是一個完整的代碼問題是異步類型的提取。要迭代集合,您必須等到獲取完成。 – Evgeniy 2014-10-06 07:01:01

+0

點擊一個按鈕即可啓動迭代 - 這是在數據被提取時完成的,所以我不認爲這是問題 – nodesto 2014-10-06 15:38:33

+0

可以請您在循環內附上「console.log(model)」輸出嗎? – Evgeniy 2014-10-07 05:14:50

回答

1

我找到了解決辦法:

_.invoke(tasks.toArray(), 'destroy'); 

顯然,使用。每摧毀模型是一個不好的做法,因爲內部迭代中得到通過模型的不斷缺失搞砸了。

+0

您能否詳細說明內部迭代如何通過刪除模型而變得混亂? – akantoword 2016-06-03 23:07:15

+0

迭代不考慮突然缺失的元素。因此,上面的方法可以工作,或者使用反向運行的for循環 – nodesto 2016-06-04 10:07:44