有没有办法删除由主干 View 实例化的所有事件监听?例如,假设我有以下 HTML/JavaScript。当点击#box 时,我想要一个弹出窗口来打招呼。

<div id="box" style="height: 100px; width: 100px; background-color: red"></div>

var Listener = Backbone.View.extend({
    el: "#box",
    events:  {
        'click #box' : 'hello'
    },
    hello: function () {
        alert('hello!');
    }
})

var listener = new Listener();

现在,我想删除事件监听器。将监听器设置为其他内容不起作用:
listener = ''; // doesn't work

如何删除事件监听器?

最佳答案

View 中的任何位置:

this.undelegateEvents();

然后,您可以稍后使用 delegateEvents(); 手动重新绑定(bind)事件
  • http://backbonejs.org/#View-delegateEvents
  • http://backbonejs.org/#View-undelegateEvents

  • 我使用添加到 Backbone.View 原型(prototype)的方法来轻松清理 View :
    Backbone.View.prototype.close = function() {
        this.undelegateEvents();
        this.remove();
    }
    
    // internal usage
    this.close();
    
    // external usage
    myView.close();
    

    编辑 19/07/2013

    Backbone v0.9.9 在 View 中添加了 .listenTo() 方法,可以在 View 移除时轻松解除外部事件的绑定(bind)。

    你可以在这里阅读更多:
  • Backbone.js - listenTo() documentation
  • StackOverflow - Backbone 0.9.9: Difference between ListenTo and on
  • 关于javascript - 删除 Backbone View 的所有事件监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12965907/

    10-14 17:31
    查看更多