Extjs 加载掩码组件的延迟显示

Extjs 加载掩码组件的延迟显示,extjs,extjs4.2,Extjs,Extjs4.2,在我的场景中,我只想在ajax调用超过500毫秒时显示ExtJs.LoadMask。由于在快速ajax调用中“加载…”消息更少,因此它有助于应用程序显示出更高的响应速度和速度。(并减少页面闪烁)。 在这种情况下,仅当响应时间超过500毫秒时,才会显示LoadMask 我认为最好的解决方案是重写Ext.LoadMaskclass。但以下尝试未成功: Ext.override(Ext.LoadMask, { msg: "Loading...", timer: null, in

在我的场景中,我只想在ajax调用超过500毫秒时显示
ExtJs.LoadMask
。由于在快速ajax调用中“加载…”消息更少,因此它有助于应用程序显示出更高的响应速度和速度。(并减少页面闪烁)。 在这种情况下,仅当响应时间超过500毫秒时,才会显示LoadMask

我认为最好的解决方案是重写
Ext.LoadMask
class。但以下尝试未成功:

Ext.override(Ext.LoadMask, {
    msg: "Loading...",
    timer: null,
    initComponent: function () {
        this.callParent(arguments);
        this.timer = null;
    },
    listeners:{
        beforeshow: function (animateTarget, callback, scope) {
            loadMask = this;
            this.timer =
                setTimeout(function () {
                    loadMask.callParent(animateTarget, callback, scope);
                }, 2000);
            return x;
        }
    }
});

经过数小时的调查,终于找到了解决办法(变通)。虽然有点恶心,但它很管用

Ext.override(Ext.LoadMask, {
    msg: "Loading...",
    timer: null,
    initComponent: function () {
        this.callParent(arguments);
        this.timer = null;
        this.isInShowProcess = false;
        this.delay = 600; //in milliseconds
    },

    listeners: {
        beforeshow: function (animateTarget, callback, scope) {
            loadMask = this;
            result = this.isInShowProcess != false;
            if (!this.timer)
                this.timer =
                    setTimeout(function () {
                        loadMask.isInShowProcess = true;
                        clearTimeout(loadMask.timer);
                        loadMask.timer = null;
                        loadMask.show(animateTarget, callback, scope);
                        loadMask.isInShowProcess = false;
                    }, this.delay);
            return result;
        },
        beforehide: function (loadMask, eOpts) {
            return loadMask.hideMask(loadMask, eOpts);
        },
        beforedestroy: function (loadMask, eOpts) {
            return loadMask.hideMask(loadMask, eOpts);
        }
    },
    hideMask: function (loadMask, eOpts) {
        if (loadMask.timer) {//not shown yet
            clearTimeout(loadMask.timer);
            loadMask.timer = null;
        }
        return true;
    }
});

我是根据具体情况来做的。我在这里发帖了:这一条也是