Extjs 加载掩码组件的延迟显示
在我的场景中,我只想在ajax调用超过500毫秒时显示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
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;
}
});
我是根据具体情况来做的。我在这里发帖了:这一条也是