У меня есть всплывающий компонент, который скрывает свое содержимое при щелчке документа. Моя логика выглядит так:
show : function () {
var me = this;
if (me.visible) {
return;
}
Ext.getDoc().on('click', function handleDocClick(e) {
if ( e.within(me.el) ) {
return;
}
if (me.isVisible() && !e.within(me.divEl)) {
me.hide();
Ext.getDoc().un('click', handleDocClick);
}
});
var cfg = me.determineLocation();
me.setLocation(cfg);
me.visible = true;
},
hide : function () {
this.visible = false;
.........
},
У меня проблемы с вызовом метода hide компонента popover. При этом событие остается незавершенным, что приводит к утечке памяти.
Я попытался изменить привязку события следующим образом:
Ext.getDoc().on('click', Ext.bind(this.handleDocClick, this));
и в шкуре:
hide : function () {
Ext.getDoc().un('click', Ext.bind(this.handleDocClick, this));
this.visible = false;
.........
},
но это не сильно помогло, так как событие снова не восстановилось должным образом.
У меня вопрос, как решить проблему. Лучшее решение будет:
в шоу:
Ext.getDoc().un('click', functionClick);
Ext.getDoc().on('click', functionClick);
и в шкуре:
Ext.getDoc().un('click', functionClick);
Я могу принять даже функцию в глобальной области видимости, но я не уверен, как я могу распространять параметры из экземпляра объекта.