javascript - Extjs文档点击事件

标签 javascript extjs extjs4

我有一个弹出窗口组件,可以在文档单击事件上隐藏其内容。我的逻辑是这样的:

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

我在调用弹出框组件隐藏方法时遇到问题。这样做会导致事件未展开,从而导致内存泄漏。

我尝试像这样更改事件绑定(bind):

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

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

最佳答案

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

single : Boolean

True to add a handler to handle just the next firing of the event, and then remove itself. http://docs.sencha.com/ext-js/4-0/#!/api/Ext.util.Observable-method-on

希望这就是您所需要的。

关于javascript - Extjs文档点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9820648/

相关文章:

长时间处理时Extjs加载Mask

javascript - ExtJS 4 存储中少数实例中的唯一记录

javascript - 在 YUI 中获取点击项的索引

javascript - 从与 JavaScript 中的字符串匹配的数组中删除多个项目

javascript - 如何从 javascript 对象中删除父键?

javascript - 在 ExtJS 的组件中添加 onclick 函数?

javascript - Sencha 2.4.1 - 列表不显示项目

extjs - 如何根据 ExtJs 中的某些条件启用禁用的文本字段?

ExtJS MVC、动态加载和 i18n

javascript - 如何修复 ajax 调用以便隐藏我的 token ?