Javascript ExtJS 6网格不';t正确更新/刷新列标题

Javascript ExtJS 6网格不';t正确更新/刷新列标题,javascript,jquery,extjs,state,extjs6,Javascript,Jquery,Extjs,State,Extjs6,我有一个基本的ExtJS gridpanel,可以动态应用自定义状态。使用另一个控件(如组合框或另一个网格),我的应用程序会在网格上应用选定的状态。这种状态的一个例子: { "height": 384, "columns": [{ "id": "h107" }, { "id": "h1", "width": 30 }, { "id": "unplannedtasks_ActualEndDate", "hidden": true, "width":

我有一个基本的ExtJS gridpanel,可以动态应用自定义状态。使用另一个控件(如组合框或另一个网格),我的应用程序会在网格上应用选定的状态。这种状态的一个例子:

{
"height": 384,
"columns": [{
    "id": "h107"
},
{
    "id": "h1",
    "width": 30
},
{
    "id": "unplannedtasks_ActualEndDate",
    "hidden": true,
    "width": 100
},
{
    "id": "unplannedtasks_ActualNoResources",
    "hidden": true,
    "width": 100
},
{
    "id": "unplannedtasks_ActualResponseDateTime",
    "hidden": true
},
{
    "id": "unplannedtasks_ActualTotalDurationInSeconds",
    "width": 100
},  
"filters": []
}
以下是网格声明的相应列部分:

Ext.define('Ext.grid.Stateful', {
  extend: 'Ext.grid.Panel',  
  stateEvents: ['columnmove', 'columnresize', 'sortchange', 'hiddenchange', 'groupchange', 'show', 'hide'],
  // CODE OMMITTED FOR BREVITY
 initComponent: function () {
    Ext.apply(this, {
       columns: [
             filterAction,
             new columns.tasks.ActualEndDate({ id: 'unplannedtasks_ActualEndDate', hidden: false }),
             new columns.tasks.ActualNoResources({ id: 'unplannedtasks_ActualResponseDateTime', hidden: false },
             new columns.tasks.ActualResponseDateTime({ id: 'unplannedtasks_ActualResponseDateTime', hidden: false },
             new columns.tasks.ActualTotalDurationInSeconds({ id: 'unplannedtasks_ActualTotalDurationInSeconds', hidden: false }
         ]
   });
 }       
})

列定义的一个示例:

 Ext.define("columns.tasks.ActualNoResources", {
  extend: "Ext.grid.column.Column",
  text: 'ActualNoResources',   
  dataIndex: 'ActualNoResources',  
  editor: {
    allowBlank: false
  }, filterable: true,
  filter: {
    type: 'string'
  }
});
一切都按照我的预期进行,除了列标题似乎没有正确刷新。如果我在网格中打开columns面板,它将显示正确数量的可见列和隐藏列。过滤器的情况也一样:如果状态中有过滤器,它会在正确的字段中应用正确的值。这就好像列标题需要以某种方式刷新一样

我尝试使用grid.getView().refresh(),但不起作用。相反,如果我调整网格大小,它会刷新隐藏列,但不会刷新最初隐藏但现在可见的列

我想我缺少了一行属于网格的applyState方法的简单代码,因此我可以命令网格使用新状态而不是以前的状态或初始状态刷新网格


关于如何解决这个问题有什么想法吗?

事实证明,我所追求的场景是不可能用ExtJS实现的。我所要求的只能在启动期间完成(没有开发人员自定义代码的干预),因此我不得不放弃这种方法并提供自定义代码。最后,我必须重建列,然后将该集合传递给网格的reconforme(store,columns)方法。

在第二个代码段(使用columns数组)中,这是如何定义的?它是使用Ext.define还是在创建网格实例时配置列?另外,您所说的“似乎没有正确刷新”是什么意思?我更新了第二个代码段。它是网格定义的一部分,使用Ext.define。我在initComponent函数中应用列。关于刷新问题,网格中的所有设置都假定一切正常:应用过滤器,在网格菜单中勾选右列。只是状态在列标题中不可见(例如,状态中的隐藏字段在网格中仍然可见)。如果我手动调整网格大小,会触发一些触发器刷新网格,从而使网格正确显示。