Extjs Grid ApplyState无法反映更改隐藏问题

时间:2019-05-10 09:09:09

标签: extjs extjs4

当我们有多个父子网格并希望在加载调用后重新配置网格时,如下所示:

listeners: {
     'afterrender': function (grid) {      
      var state =grid.getState();
      state.columns[1].hidden= true;
      grid.applyState(state); 
    }
}

这种行为甚至在ExtJS 6.5.1上仍然可以重现。

例如 https://www.sencha.com/forum/showthread.php?306941-Apply-state-after-grid-reconfigure

2 个答案:

答案 0 :(得分:0)

这是我用来解决隐藏列问题的替代。我使用的是6.6,因此不确定是否可以在4.4中使用。另外,您可能不需要暂停/恢复布局,但也不确定。

Ext.define('MyApp.overrides.Grid', {
            override: 'Ext.grid.Panel',

            applyState: function () {
                this.callParent(arguments);

                Ext.suspendLayouts();
                Ext.each(this.getColumns(), function (column) {
                    if (column.hidden) {
                        column.show();
                        column.hide();
                    }
                });
                Ext.resumeLayouts(true);
            }
    });

答案 1 :(得分:0)

applyState仍然是一个问题。当网格具有多个隐藏列并且我们使用applyState函数时,它会使网格崩溃。因此,我们跳过了隐藏的属性部分,尽管它对于宽度更改,过滤器等工作正常。

listeners: {
     'afterrender': function (grid) {      
      var state =grid.getState();
      state.columns[1].hidden= false;
      grid.applyState(state); 
      grid.columns[3].hidden = true;
    }
}

如果您手动设置列的hidden属性,它将被隐藏。