2011-09-17 22 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

相关问题