Прямой магазин Ext JS 4, как * предотвратить * загрузку маски? - PullRequest
0 голосов
/ 26 ноября 2011

Я нашел много ссылок на то, как создать «загрузочное» сообщение или маску при загрузке данных в сетку в Ext JS 4 через хранилище данных / прокси (я использую прямой тип).

Итак, я добавил это в свой контроллер в один момент (потому что я НЕ получал сообщение о загрузке ранее):

init: function() {
var store = this.getEncountersStore();
store.on({
        beforeload: function(store,operation,eopts) {
            Ext.getBody().mask('Loading...');
                    },
                    load: function(store,records,success,operation,eopts) {
                            Ext.getBody().unmask();             
                        }
                });

     }

Это, кажется, работает для меня в моем приложении MVC, однако затем я добавил задачуТаймер менеджера для автоматического обновления данных сетки каждые 10 секунд:

  this.runningTask = Ext.TaskManager.start ({
                run: this.loadEncounterData,
                interval: 10000,
                scope: this
            });

loadEncounterData: function() {
                var store = this.getEncountersStore();
                store.load({
                    params: {
                    },
                    callback: function(r,options,success) {
                        if(success == true)     
                        ...

                    } //callback
                }); //store.load

Я заметил, что теперь на экране появилось ДВА сообщения о «загрузке» маски!

Итак, я удалил свой магазин.on 'Блок кода выше от моего контроллера init, и теперь у меня есть только одно сообщение.

Итак, откуда пришло другое сообщение?

Является ли оно частью Grid?:

Ext.define('ESDB.view.encounter.List', {
extend: 'Ext.grid.Panel',
...

Я нашел страницу , которая, кажется, задает тот же вопрос, хотя я не смог понять, как заставить его работать или как это делать в соответствии с ExtJS 4 /MVC.

Ответы [ 3 ]

4 голосов
/ 23 октября 2012

loadMask не является конфигом на панели Grid.Вы можете добавить в качестве конфигурации в gridpanel

viewConfig  : {
    loadMask: false
}
1 голос
/ 29 ноября 2011

LoadMask является частью gridView.

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.grid.View-cfg-loadMask

Все компоненты GridPanel имеют компонент gridView, который определяет различные действия с представлением таблицы на панели.

Чтобы предотвратить загрузку маски в сетке,Вы устанавливаете конфигурацию для loadMask в ложь, IE:

Ext.define('ESDB.view.encounter.List', {
    extend: 'Ext.grid.Panel',
    loadMask : false,
    ...
0 голосов
/ 19 июля 2016

Вы можете изменить функцию загрузки, чтобы просто загрузить магазин:

loadEncounterData: function() {
    var store = this.getEncountersStore();
    store.load();
    ...

Тогда вы можете использовать следующий подход для автоматической обработки loadMask всякий раз, когда загружается хранилище сетки. Использование Ext.util.DelayedTask удобно для предотвращения появления loadMask, если загрузка занимает менее 500 мс.

Ext.define('ESDB.view.encounter.List', {
    extend: 'Ext.grid.Panel',
    ...

    initComponent: function() {
        var me = this;

        me._mask = new Ext.LoadMask(me, {msg: 'Loading...'});
        me._maskd = new Ext.util.DelayedTask(function() { 
            me._mask.show(); 
        });
        me.store = Ext.create('Ext.data.Store', {
            ...
            listeners: {
                beforeload: function() { 
                    me._maskd.delay(500); 
                    ...
                },
                load: function() { 
                    me._maskd.cancel(); 
                    me._mask.hide(); 
                    ...
                }
            }
        });
        ...
...