删除未使用类的主干事件(事件被触发两次)

时间:2013-06-04 06:13:46

标签: events backbone.js

我有两个主干视图类fileView和userDetails。

在Web应用程序的一个页面上,我使用fileView呈现所有文件

在另一个页面上,我使用userDetails视图显示用户详细信息,并创建fileView的新实例以列出用户文件。

在两个页面上导航后,我的事件被触发两次(一次用于filesView,一次用于userDetails.fileView)。

如何删除userDetails.fileView的事件?我阅读了文档并尝试了迄今为止没有运气的任何内容。

3 个答案:

答案 0 :(得分:1)

而不是重新发明轮子,答案就在这里。

Derick Bailey: Managing event removal

我在所有骨干应用程序中使用此方法,但必须全额归功于Derick Bailey :)

感谢Derick!

答案 1 :(得分:1)

我认为你有两点要做到这一点:

  1. 对于骨干DON中的事件,请使用object.on(事件,回调,上下文) 尽你所能。因为它会传递对象的引用 回调,你几乎没有机会删除它。代替, 使用object.listenTo(其他,事件,回调),这样你就可以使用 object.stopListening()删除它们。
  2. 考虑到上述情况,您可以在您的帐户中创建一个帮助函数 查看,说" dispose"。在该函数中,首先是stopListening()all 事件附加到您的视图,然后从DOM树中删除()它。
  3. 这里有一些更详细的情报: http://addyosmani.github.io/backbone-fundamentals/#memory-management

答案 2 :(得分:1)

使用最新版本的Backbone处理事件的正确方法是listenTo()函数。它的行为类似于常规事件侦听器,但使您调用此函数的对象知道它们正在侦听的内容。这样,一旦不再使用对象,您就可以进行自动清理(例如,当删除View时)。当然,如果需要,您可以调用stopListening()手动触发此行为。