我遇到了在视图initialize()中使用的backbone.js collection.add的问题;在我的应用程序中,当你更改部分我删除我的视图,但我不删除我在该部分中使用的集合(集合在应用程序加载时初始化为空)。
如果有人回到我的部分,我会使用相同的集合,并在其上初始化this.collection.add()。然而,作为副作用,集合现在在我的新视图中添加了2倍的模型,有没有办法防止这种行为?
事件陌生人它只发生在Firefox中..而且,这个double collection.add毫无意义,因为我清楚地看到它的视图编号不同(即使它来自同一个变量。)
答案 0 :(得分:1)
更改视图时必须手动取消绑定事件侦听器 - 否则事件侦听器将继续引用内存中已删除的视图,并且永远不会对其进行垃圾回收。从长远来看,当你的应用程序开始吃资源时,它会导致大量内存泄漏和整个系统变慢。
目前Backbone中没有内置的解决方案,所以你必须自己处理它。
专业提示:)
例如,您可以从视图中侦听路由更改,如果路由更改,则调用“onDestroy”方法,该方法可以清除所有引用其他选项是 - 而不是删除视图 - 使用jquery detach
方法,该方法不会清除所有jquery dom / custom事件并多次重用相同的视图