我在通过数据存储/代理(我使用直接类型)将数据加载到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来做。
答案 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();
...
}
}
});
...