我在ajax调用之前调用grid.setloading。
在ajax done函数中我调用grid.setloading(false,false)。
这会删除加载,但会使网格控件断开,并显示错误消息Uncaught TypeError: Cannot read property 'componentLayoutCounter' of undefined
如果我尝试使用任何网格控件,如下一页或刷新。
grid.setLoading();
$.ajax({
url: "test.py",
context: document.body
}).done(function() {
alert('well done');
grid.setLoading(false,false);
});
基本上我的问题是我的网格究竟发生了什么,是否有一种方法可以阻止用户使用网格,而ajax可以实现它的魔力而不使用setloading,因为它让我头疼。或者,如果我可以修复setloading函数,那么它之后就不会破坏网格。
注意,如果我没有使用setloading,那么ajax按预期工作,并且网格保持其稳定性,因此它不在脚本的其余部分。
注意,ajax调用真的很慢 - 最多一分钟 - 因为test.py与执行某些复杂的mumbo jumbo的第三方API通信,所以我需要一些方法来禁用网格,而这正在发生。
谢谢!
答案 0 :(得分:1)
为什么不在整个网格上应用加载掩码,然后在load
事件上取消屏蔽它。这将阻止用户访问任何网格控件。您还应该从网格视图中禁用loadMask以防止双重屏蔽,这看起来很愚蠢。像这样:
grid.el.mask('loading...', 'loadingMask');
$.ajax({
url: "test.py",
context: document.body
}).done(function() {
alert('well done');
grid.el.unmask();
});
要在网格的行部分(gridview)上禁用默认加载掩码,请在创建网格时使用此viewConfig属性:
Ext.create('Ext.grid.Panel', {
title: 'Simpsons',
store: Ext.data.StoreManager.lookup('simpsonsStore'),
columns: [
{ text: 'Name', dataIndex: 'name' },
{ text: 'Email', dataIndex: 'email', flex: 1 },
{ text: 'Phone', dataIndex: 'phone' }
],
// this will prevent a double mask situation whenever the grid is loading
viewConfig: {
loadMask: false
}
height: 200,
width: 400,
renderTo: Ext.getBody()
});