Extjs文档点击事件

Extjs document click event

本文关键字:事件 文档 Extjs      更新时间:2023-09-26

我有一个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组件hide方法时遇到问题。这样做会使事件处于未缠绕状态,从而导致内存泄漏。

我试着这样更改事件绑定:

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。

我不确定你所说的放松是什么意思,但听起来你试图执行一次这个事件,然后删除监听器。在这种情况下,ExtJS observable API为您的听众提供了选项:

single:布尔

True可添加一个处理程序来处理事件的下一次激发,并且然后将其自身移除。http://docs.sencha.com/ext-js/4-0/#/api/Ext.util.Observable-方法

希望这正是你所需要的。