3

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

如何删除事件侦听器?

4

1 回答 1

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()向视图添加了该方法,使得在移除视图时可以轻松解除绑定外部事件。

你可以在这里阅读更多:

于 2012-10-19T00:58:40.423 回答