有没有办法删除由主干 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)事件我使用添加到 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)。你可以在这里阅读更多:
关于javascript - 删除 Backbone View 的所有事件监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12965907/