Extjs文档点击事件

时间:2012-03-22 10:41:17

标签: javascript extjs extjs4

我有一个popover组件,它隐藏了文档点击事件的内容。我的逻辑是这样的:

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;
            .........
},

我在调用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);

我甚至可以接受全局范围内的函数,但我不确定如何从对象实例中分配params。

1 个答案:

答案 0 :(得分:0)

我不确定你是什么意思放松,但听起来你正试图让这个事件被执行一次,然后移除听众。在这种情况下,ExtJS observable API具有为您的侦听器包含的选项:

  

single:Boolean

     

如果为True,则添加处理程序以仅处理事件的下一次触发,以及   然后自行删除。   http://docs.sencha.com/ext-js/4-0/#!/api/Ext.util.Observable-method-on

希望这就是你所需要的。