0

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

在网络应用程序的一页上,我使用 fileView 呈现所有文件

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

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

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

4

3 回答 3

1

I think you got two points to achieve this:

  1. For events in backbone DON'T use object.on(event, callback, context) as possible as you can. Because it will pass the object's reference to the callback and you hardly have chance to remove it. instead, use object.listenTo(other, event, callback), so you can user object.stopListening() to remove them.
  2. with the above in mind you can create a helper function in your view, say "dispose". In that function, first you stopListening() all events attach to your view, then remove() it from DOM tree.

here's some intel in more detail: http://addyosmani.github.io/backbone-fundamentals/#memory-management

于 2013-06-04T07:25:47.417 回答
1

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

于 2013-06-04T10:23:52.983 回答
1

与其重新发明轮子,答案就在这里。

Derick Bailey:管理事件移除

我在我所有的主干应用程序中都使用了这种方法,但必须归功于 Derick Bailey :)

谢谢德里克!

于 2013-06-04T06:29:39.867 回答