2011-09-17 30 views
1

我使用Backbone.js呈現具有不同狀態的項目列表(電子郵件收件人),例如。確認,待定等。列表呈現後,用戶可以選擇過濾它們,以便用戶可以列出所有收件人,或僅列出已確認的收件人等。該項目(收件人)的自然存儲在一個集合中..Backbone.js:清除所有視圖的最佳方法

我的做法是在過濾事件:

  1. 清除所有項目的視圖的
  2. 從應用程序中查看通話一個filterOnStatus功能集合中返回所有模型並將它們添加到視圖中。

第2步工作正常。但清除館藏視圖上所有項目的最佳方法是什麼?

在Todo示例應用程序(http://documentcloud.github.com/backbone/examples/todos/index.html)中,它們執行類似操作。在應用程序視圖中,以下代碼用於清除列表中的所有已完成項目。

clearCompleted: function() { 
    _.each(Todos.done(), function(todo){ todo.destroy(); }); 
    return false; 
}, 

這裏的區別是,他們通過去除實際模型做到這一點。該模型的視圖監聽它們刪除視圖的銷燬事件。

我想保留模型。

解決此問題的最佳方法是什麼?模型中是否需要存儲對其視圖的引用,然後迭代模型並刪除視圖?

如果我想過濾模型中的屬性,是否有更好的方法?

回答

0

如果你的第一個步驟是隻需清除所有項目那麼你爲什麼不添加一個簡單的方法,你APPVIEW,將做到這一點,如:clearList: function() { this.$('.list').html('') }。或者更好,您可以過濾所有模型並將它們渲染到臨時元素,並用它替換當前列表。因此,所有的過濾只能在一個DOM調用中完成(DOM很慢)。例如使用jQuery:

AppView.filterOnStatus = function() { 
    var $fragment = $('<div/>') 

    // filter your collection and append rendered views to $fragment 

    this.$('.list').html($fragment.html()) 
} 

當然也有更復雜的方式,但是否需要它們取決於你想要達到的目的。從我所瞭解的這個簡單的方法就足夠了。

+1

但是用這種方法我跟蹤了我的視圖(每個列表項都是一個視圖)。沒有? – Sebastian

+0

你的意思是什麼意思?你爲什麼要保留它? –

+0

我的意思是視覺對象,記憶方面。我沒有調用view.remove();在上面。但是你說從DOM中刪除DOM表示會自動刪除骨幹視圖? – Sebastian

相關問題