Я работаю над игрой, и я хотел бы абстрагировать свой ui и связывать события развязывания на основе различных состояний игры. Но я не могу понять, почему это событие не удаляется. Кажется, что область действия правильна в обработчике.Почему removeeventlistener не работает в этом объектном контексте?
соответствующих (усеченные) ЯШ:
var controls = {
game : {
el : null,
cb : null,
bind : function(el, cb) {
this.el = el;
this.cb = cb;
this.el.addEventListener('click', this.handler.bind(this), true);
},
unbind : function() {
console.log('unbind');
this.el.removeEventListener('click', this.handler, true);
},
handler : function() {
this.cb();
this.unbind();
}
}
};
var manager = {
init : function() {
var c = document.getElementById('c');
controls.game.bind(c, this.action.bind(this));
},
action : function() {
console.log('c clicked');
}
};
manager.init();
И все же, если удалить событие это, как он работает:
(...)
bind : function(el, cb) {
this.el = el;
this.cb = cb;
var self = this;
this.el.addEventListener('click', function() {
self.cb();
self.el.removeEventListener('click', arguments.callee, true);
}, true);
}
(...)
благодаря
Круто! Спасибо за быстрый ответ. Я не знал о создании новой функции. :) –
Очень полезно спасибо! –
почему бы и нет? -> this.el.addEventListener ('click', this.handler.bind (this), true); и this.el.removeEventListener ('click', this.handler.bind (this), true); –