我有一个窗口,可以通过单击按钮打开。窗口需要时间加载,因此我使用加载掩码:
handler:function(){
var myMask = new Ext.LoadMask(Ext.getBody(), {msg:"Loading..."});
myMask.show();
var winAppln = showWin(myMask);
if(winAppln){
var task = new Ext.util.DelayedTask(function(){
winAppln.show();
});
task.delay(2000);
}
}
我将掩码对象隐藏在窗口的afterrender函数中,方法如下:
afterrender:function(){
if(maskObj){
maskObj.hide();
}
}
上述代码在IE(版本9和8)之外的所有浏览器中都能正常工作。
在IE9和IE8中,在第8682行的ext-all-debug.js中生成了“无效参数”错误,如下所示
me.dom.style[ELEMENT.normalize(style)] = value;
任何人都可以指导这背后可能出现的原因。
另外,我的主要目的是弥补按钮和按钮之间的延迟。打开窗口,以便用户了解正在发生的事情。有没有比使用Load Mask更好的方法,或者可以以某种不同的方式使用Load Mask,然后如上所示?
提前致谢。
PS:我正在使用ExtJS版本4.0.7
答案 0 :(得分:2)
根据我到目前为止发现的事情,这个问题是在窗口有模态:true set时引起的。
IE 8和9在loadMask和modal:true之间产生冲突并抛出错误。
解决这个问题的方法是从窗口中取出modal:true,并在调用loadmask hide函数后在窗口的afterrender事件中将其设置为true,如下所示:
afterrender:function(){
if(maskObj){
maskObj.hide();
}
this.modal = true;
}
希望这有助于寻找同样的人。
答案 1 :(得分:1)
ExtJS4 Ext.LoadMask中存在一个错误,这是Internet Explorer 7和8中的一个问题。
当显示加载掩码时,ExtJs尝试找出父元素的zIndex,然后设置加载掩码的zIndex。在Internet Explorer 7/8中,元素也可以将zIndex设置为“auto”。字符串“auto”的parseInt是NaN。将zIndex设置为NaN会导致IE7 / IE8中出错。
解决方案:覆盖LoadMask
Ext.override(Ext.LoadMask, {
setZIndex: function(index) {
var me = this,
owner = me.activeOwner;
if (owner) {
index = parseInt(owner.el.getStyle('zIndex'), 10) + 1;
}
if (!isNaN(index)) {
me.getMaskEl().setStyle('zIndex', index - 1);
return me.mixins.floating.setZIndex.apply(me, arguments);
} else {
return '';
}
}
});
Sencha论坛中也讨论了这个主题:
答案 2 :(得分:0)
尝试使用
Ext.getBody().mask("Loading")
我使用它而不是LoadMask只是因为在ext中你无法使用暗淡的背景颜色掩盖多个组件,.mask()就可以了。 LoadMask更漂亮,但有一些问题,所以.mask可以工作。