代码之家  ›  专栏  ›  技术社区  ›  Jacobian

SuspendLayout、resumeLayouts和网格列

  •  3
  • Jacobian  · 技术社区  · 10 年前

    我使用这两个函数 suspendLayouts resumeLayouts 以便优化大网格渲染。特别是,我在以编程方式隐藏一些网格列之前和之后使用它们。我是这样做的:

    Ext.suspendLayouts();
    
    ... a lot of code, some code may hide a lot of grid columns
    
    Ext.resumeLayouts();
    

    若我不使用它们,浏览器要么不会响应,要么会发出一个关于长时间脚本的警告。如果我使用它们,那么它运行得很快,但不是在所有浏览器中。例如,在Chrome中,我看到一些列没有被隐藏,而它们的列标题/标题被隐藏。

    在列数相对较少的小网格中,这段代码在不暂停和恢复布局的情况下运行得很好。但我需要它在大网格中工作。

    顺便说一下,我像这样隐藏列

    var cols=grid.headerCt.getGridColumns()
    Ext.each(cols, function (item, index, all){
      ... some code
      if(ok) item.setVisible(false);
    })
    

    也许,还有另一种更好的隐藏网格列的方法。

    2 回复  |  直到 10 年前
        1
  •  7
  •   Jacobian    10 年前

    我找到了解决办法。我应该用 grid.suspendLayouts() grid.resumeLayouts() 而不是 Ext.suspendLayouts() Ext.resumeLayouts() 。现在,它按预期工作。

        2
  •  2
  •   Andrew    9 年前

    Ext.ssuspendLayouts()对我不起作用。网格仍然很慢地重新绘制。 我使用了grid.reconfigure():

    Ext.each(grid.initialConfig.columns, function (columnCo, index, all){
      ... some code
      if(ok) columnConfig.hidden = false;
    })
    
    grid.reconfigure(grid.store, grid.initialConfig.columns);