删除Backbone视图的所有事件侦听器

时间:2012-10-19 00:52:15

标签: javascript backbone.js

有没有办法删除骨干视图实例化的所有事件侦听?例如,假设我有以下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

如何删除事件监听器?

1 个答案:

答案 0 :(得分:14)

您视图中的任何位置:

this.undelegateEvents();

然后,您可以稍后使用delegateEvents();

手动重新绑定事件

我使用添加到Backbone.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将.listenTo()方法添加到视图中,以便在删除视图时轻松取消绑定外部事件。

您可以在这里阅读更多内容: