Extjs Grid ApplyState 未反映更改 |隐藏问题

Extjs Grid ApplyState not reflecting the changes | Hide issue

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

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

这是我一直用来修复隐藏列问题的覆盖。我使用的是 6.6,所以不确定这是否适用于 4.4。此外,您可能不需要 suspend/resume 布局,但也不确定。

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

嗯,这仍然是 applyState 的问题。当网格有多个隐藏列并且我们使用 applyState 函数时,它会使我们的网格崩溃。所以我们跳过了隐藏的 属性 部分,尽管它在宽度变化、过滤器等方面工作得很顺利。

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

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