SuspendLayouts,resumeLayouts和grid列

时间:2014-08-10 14:37:01

标签: extjs extjs4.1

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

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 个答案:

答案 0 :(得分:6)

好吧,我找到了解决方案。我应该使用grid.suspendLayouts()grid.resumeLayouts()代替Ext.suspendLayouts()Ext.resumeLayouts()。现在,它按预期工作。

答案 1 :(得分:2)

Ext.suspendLayouts()对我不起作用。网格仍然很慢地被重绘。 我使用了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);