Extjs событие щелчка документа - PullRequest
1 голос
/ 22 марта 2012

У меня есть всплывающий компонент, который скрывает свое содержимое при щелчке документа. Моя логика выглядит так:

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);

Я могу принять даже функцию в глобальной области видимости, но я не уверен, как я могу распространять параметры из экземпляра объекта.

1 Ответ

0 голосов
/ 22 марта 2012

Я не уверен, что вы подразумеваете под раскруткой, но похоже, что вы пытаетесь выполнить это событие один раз, а затем удалить слушателя. В этом случае наблюдаемый API ExtJS имеет опции для вашего слушателя:

одиночный: логический

True, чтобы добавить обработчик для обработки только следующего запуска события, и затем удалите себя. http://docs.sencha.com/ext-js/4-0/#!/api/Ext.util.Observable-method-on

Надеюсь, это то, что вам нужно.

...