ExtJS 5.0 - 在侦听器中调用 un 或 removeEventListener?

ExtJS 5.0 - Calling un or removeEventListener while in listener?

我们的一些遗留代码使用 on 和匿名函数创建监听器。这些听众的寿命有限。

代码是这样的:

me.getEl().on(someCondition()? 'mousedown': 'touchstart',
    function(event) {
        if (someOtherCondition()) {
            destroyStuff();
            // We don't need this listener any more!
            // ***
        }
    }
);

检查应用程序运行时的资源使用情况,这些僵尸侦听器不断累积,尤其是鼠标悬停侦听器,占用大量资源和周期。

有没有办法在// ***评论下方使用unremoveEventListener并删除监听器?按照这些行说点什么:

event.target.removeEventListener(event.type, /* reference this anonymous function? */);

您有多种选择。

  • on 接受一个 options 参数,如果只应执行一次,该参数可能包含 single:true。我认为这不适用于您的示例,因为可以多次调用侦听器,但可能适用于您的一些没有条件的用例。
  • 您可以使用 mon with destroyable: true to create destroyable listeners. These listeners can be removed using mun.