2012-03-06 68 views
0

我有一個表,我正在填充新項目添加到集合時,我填充刪除項目集合時從該集合中刪除項目。下劃線每個方法沒有運行通過完整的骨幹收集

然後我有一個保存按鈕,觸發集合上的保存/刪除事件。

保存工作正常,但只有一半的刪除正在工作,我很困惑。

class MyApp.Collections.DeletedTasks extends Backbone.Collection 
    model: MyApp.Models.Task 

    destroy:() -> 
    console.log('destroy the collection size: ' + @.models.length) 
    _.each(@.models, @sendDelete) 

    sendDelete: (model) -> 
    console.log('deleting model with id: ' + model.get('id')) 
    model.destroy() 

控制檯輸出

Done with Adding/Updating Collections 
destroy the collection size: 6 
deleting model with id: KSc18d06fefddbebd2ade74bcab4c670c907 
deleting model with id: KS07cb95935b1caf3817758739224a3e1a2f 
deleting model with id: KS6f473b3e15740fe7c6c0909e14986700a9 

發生了什麼? 它爲什麼只做3? 如何調試?

任何幫助表示讚賞!

回答

3

首先將集合複製到數組。您正在從正在枚舉的集合中刪除。我不是一個咖啡腳本大師卻是這樣的:

_.each(@.models.toArray(), @sendDelete)

+0

_each(@。toArray(),@sendDelete) – theSociableme 2012-03-06 22:26:56

+0

完全解決了它謝謝! – theSociableme 2012-03-06 22:27:11

+0

酷 - 和thof咖啡標記更正:)(需要了解) – timDunham 2012-03-07 00:05:14

4

蒂姆已經給予了罰款的答案,但有一個更好的辦法:

下劃線的迭代方法已經骨幹的集合,的一部分意味着,而不是

_.each(@.models, @sendDelete) 

可以簡單的寫

@each(@sendDelete) 

這也照顧到@models爲您的陣列,防止destroy()搞亂迭代。

你不應該直接使用@models;它應該被認爲是一個內部屬性,例如型號上的@attributes