extjs setloading(false)导致错误

时间:2014-03-21 17:10:03

标签: javascript ajax extjs

我在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通信,所以我需要一些方法来禁用网格,而这正在发生。

谢谢!

1 个答案:

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