2012-01-14 51 views
0

我在backbone.js中遇到了一个问题collection.add在视图中使用initialize();在我的应用程序中,当您更改部分时,我删除了我的视图,但我并未删除该部分中使用的集合(集合在应用程序加载时初始化为空)。长寿backbone.js与重复添加事件的集合错误

如果有人回来我的部分我使用相同的集合,并初始化this.collection.add()就可以了。然而,作为副作用,集合现在在我的新视图中添加2倍的模型,是否有办法阻止这种行为?

事件陌生人它只是Firefox发生..而且,这双collection.add是没有意义的,因为我清楚地看到,它的不一样的视角数量(即使是来自同一个变量。)

+0

您能否提供您的代码示例 – Paul 2012-01-14 20:09:31

回答

1

当您更改视图时,您必须手动解除绑定事件侦听器 - 否则事件侦听器将保留对内存中已删除视图的引用,并且它们将永远不会被垃圾收集。从长远来看,随着您的应用程序开始占用资源,它可能会导致大量内存泄漏和整个系统速度下降。

目前在Backbone中没有内置解决方案,因此您必须自己处理它。

专业提示:)

比如,你可以聆听观点和路线的变化,如果路由变化,然后调用“的onDestroy”的方法,可清理所有引用

另一种选择是 - 而不是删除视图 - 使用jquery detach方法不会清理所有jquery dom /自定义事件并多次重复使用相同的视图