【问题标题】:Stopping listening to DOM events in Backbone停止监听 Backbone 中的 DOM 事件
【发布时间】:2016-04-01 17:36:03
【问题描述】:

今天我了解到 Backbone.View 的 listenTo 方法旨在通过 Backbone 模型或集合的更改来侦听 trigger-ed 事件。它不是为监听 DOM 事件而设计的。

这引发了以下问题。 Backbone 文档说,当 Backbone 视图是 remove-ed 时,它将自动取消订阅它正在通过 listenTo 侦听的所有事件。它没有具体提及视图放置在 DOM 元素上的侦听器的命运。

那么当监听 DOM 事件的视图被移除时会发生什么?以下两种情况有什么区别吗?

  • 一个视图有一个events 对象,该对象包含视图的$el 的子节点上正在被监听的事件列表;

  • 视图监听一些任意的 DOM 元素,不一定是视图 $el 的子元素。这种情况和之前的情况有什么不同吗?

当视图被移除时,视图的监听器会自动取消订阅 DOM 事件,还是应该手动取消订阅?

【问题讨论】:

  • 在第一个场景中,事件监听器被移除。这项工作由 jQuery 的 .remove() 方法 (api.jquery.com/remove) 完成,Backbone.View.prototype.remove 委托给该方法。在第二种情况下,您的视图必须在任意 DOM 元素上显式调用 .off()。

标签: javascript events dom backbone.js


【解决方案1】:

一个视图有一个事件对象,其中包含视图的 $el 的子节点上正在被监听的事件列表;

当使用它的 remove 方法正确删除视图时,这些将被主干取消委托(删除)。

视图监听一些任意的 DOM 元素,不一定是视图 $el 的子元素。这种情况和之前的情况有什么不同吗?

没有使用主干的内置方法,因此不推荐。如果您自己执行此操作 - 一些元素持有事件侦听器,指向您的视图上的方法,而主干不知道 - 您必须自己清理这些,否则它会创建僵尸视图(内存泄漏)

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多