我无法通过使用off来从ember应用程序中删除事件处理程序。
我的处理函数是
setClickEvent: function(){
var panel = this.$();
if(panel && panel.find(event.target).length === 0 && this.get('isOpen')){
this.send('cancel');
}
}
我使用下面的代码
在didInsertElement
函数中调用此函数
didInsertElement: function(){
Ember.$('body').on('click', Ember.run.bind(this, this.setClickEvent));
}
并在off
函数中调用willDestroyElement
,如下所示
willDestroyElement: function(){
Ember.$('body').off('click', this.setClickEvent);
this._super();
}
我尝试了解与之相关的许多stackoverflow问题。建议在on
之后放置一个空的off
,我尝试了但是它没有用。
问题在于,每当我离开页面并返回时,我发现两个处理程序处理相同的事件,因为前一个事件处理程序没有被删除,事件处理程序正在堆积。
答案 0 :(得分:3)
这实际上与实际上没有关系。问题在于这一部分:
Ember.run.bind(this, this.setClickEvent)
它的作用是bind
创建一个绑定到this
的新函数。然后将该新函数作为处理程序附加。但是,您尝试off()
原始setClickEvent
而不是新功能。
尝试在创建对象时绑定函数并将其存储以供以后使用:
init: function () {
this._super();
this._setClickEvent = Ember.run.bind(this, this.setClickEvent);
}
然后在didInsertElement
和willDestroyElement
中,直接使用绑定功能this._setClickEvent
。
必须为off
提供确切的函数on
,否则它将无法在其观察者列表中找到它并且不会将其删除。