ExtJs не отображает loadMask при использовании конфигурации `loader`

Я использую ExtJs 6.2.1. У меня есть панель с такой конфигурацией загрузчика:

loadHtml: function(url, params){
    var maintab = this.getController('Main').getMainTab(),
        tab = maintab.add({
            title: params.label + (params.objectId ? ' ' + Lang._('n°') + params.objectId : ''),
            bodyPadding: 5,
            loader: {
                url: Paths.ajax + 'sav/' + url,
                params: params,
                autoLoad: true,
                loadMask: true,
                failure: Mb.Msg.loaderFailure
            },
            scrollable: 'y',
            closable: true
        });
    maintab.setActiveTab(tab)
},
// loadHtml is triggered by user interaction
// maintab is a tabpanel containing some tabs

Маска загрузки никогда не отображается. Я думаю, что это сообщение на сенча форум связан.


person Lorenz Meyer    schedule 29.12.2020    source источник
comment
Есть ли образец скрипки?   -  person Arthur Rubens    schedule 29.12.2020
comment
Нет. У меня не было времени. Скрипка Sencha действительно отнимает много времени. Я даю больше контекста в вопросе.   -  person Lorenz Meyer    schedule 30.12.2020


Ответы (1)


В ComponentLoader есть ошибка, которая не позволяет указать обе опции autoLoad: true и loadMask: true. addMask вызывается на панели, даже если она еще не отрисована.

Чтобы устранить ошибку, давайте добавим loadMask к событию render. Следующее переопределение исправляет ошибку:

Ext.define('Mb.override.ComponentLoader', {
    override: 'Ext.ComponentLoader',
    addMask: function(mask){
        let t = this.target
        if(t.rendered) {
            t.setLoading(mask)
        } else {
            t.on('render', function () {
                t.setLoading(mask)
            })
        }
    },
});

Требование. Требуется, чтобы рендеринг панели выполнялся быстрее, чем запрос XHR, извлекающий содержимое панели.

person Lorenz Meyer    schedule 29.12.2020