ExtJS 4 - 加载掩码在打开窗口时使用时在IE8和IE9中给出错误

时间:2011-11-11 09:52:51

标签: extjs load window extjs4 mask

我有一个窗口,可以通过单击按钮打开。窗口需要时间加载,因此我使用加载掩码:

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

3 个答案:

答案 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可以工作。