Ext JS 4直接存储如何*防止*加载掩码?

时间:2011-11-25 20:10:44

标签: grid extjs4 mask

我在通过数据存储/代理(我使用直接类型)将数据加载到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

我注意到屏幕上现在有两个“加载”屏蔽消息!

所以,我从控制器init中删除了上面的'store.on'代码块,现在我只有一条消息。

那么其他消息来自哪里?

它是网格的一部分吗?:

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

我发现page似乎问了同样的问题,虽然我无法弄清楚如何让它工作,或者如何根据ExtJS 4 / MVC来做。

3 个答案:

答案 0 :(得分:4)

loadMask不是“网格”面板中的配置。 您可以在gridpanel中添加配置

viewConfig  : {
    loadMask: false
}

答案 1 :(得分:1)

loadMask是gridView的一部分。

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

GridPanel组件都有一个gridView组件,它定义了与面板中的表视图有关的各种事情。

要阻止网格上的loadMask,请将loadMask的config设置为false,IE:

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

答案 2 :(得分:0)

您可以将加载功能更改为仅加载商店:

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

然后,您可以使用以下方法在网格存储加载时自动处理loadMask。 使用Ext.util.DelayedTask可以防止loadMask在负载小于500ms时出现。

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(); 
                    ...
                }
            }
        });
        ...