ExtJS 4 - Загрузить маску, выдающую ошибки в IE8 и IE9 при использовании при открытии окна - PullRequest
2 голосов
/ 11 ноября 2011

У меня есть окно, которое открывается при нажатии кнопки.Для загрузки окна требуется время, и поэтому я использую маску загрузки следующим образом:

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:function(){
    if(maskObj){
        maskObj.hide();
    }
}

Приведенный выше код прекрасно работает во всех браузерах, кроме IE (версии 9 и 8).

В IE9 и IE8 в файле ext-all-debug.js генерируется ошибка «Недопустимый аргумент».строка 8682, которая выглядит следующим образом:

me.dom.style[ELEMENT.normalize(style)] = value;

Кто-нибудь может подсказать, что может быть причиной этого.

Кроме того, моя главная цель состоит в том, чтобы покрыть разрыв между нажатием кнопки &открытие окна, чтобы пользователь знал, что что-то происходит.Есть ли лучший способ сделать это иначе, чем использовать Load Mask, или можно было бы использовать Load Mask иным способом, чем как показано выше?

Заранее спасибо.

PS: Яс использованием ExtJS версии 4.0.7

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

В соответствии с тем, что я до сих пор обнаружил, эта проблема возникает, когда в окне установлено значение modal: true.

IE 8 и 9 создают конфликт между loadMask и modal: true и выдают ошибку.

Обходной путь для этого состоит в том, чтобы снять значение modal: true из окна и установить его значение true в событии afterrender окна, как только функция loadmask hide была вызвана, как показано ниже:

afterrender:function(){
    if(maskObj){
        maskObj.hide();
    }
    this.modal = true;
}

Надеюсь, это поможет тому, кто ищет то же самое.

1 голос
/ 21 февраля 2014

В ExtJS4 имеется ошибка Ext.LoadMask, которая является проблемой в Internet Explorer 7 и 8.

При отображении маски загрузки ExtJ пытается определить zIndex родительского элемента, а затем устанавливаетz Индекс маски загрузки.В Internet Explorer 7/8 элемент мог также установить zIndex «auto».parseInt строки "auto" равен 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:

0 голосов
/ 12 ноября 2011

Попробуйте с

Ext.getBody().mask("Loading")    

Я использую это вместо LoadMask только потому, что в ext вы не можете замаскировать более одного компонента с затемненным цветом фона, .mask () добивается цели. LoadMask красивее, но имеет некоторые проблемы, поэтому .mask может работать.

...