在我的网格中,我将 initialConfig.columns 值设置为Grids列属性。这样,当我点击&#39时,我可以重置表格的列顺序,宽度等。 ;复位'按钮我的所有工具栏都有。
我还有一种名为 gridUtils.createClsValues 的实用工具方法,它将 cls 值添加到我的列上(我已经省略了其余的initComponent方法)。
initComponent: function () {
//create class values on column values for test-automation
gridUtils.createClsValues(this.columns, this.iLeanPrefix + '.' + this.tableId);
this.initialConfig.columns = this.columns;
//the rest ommitted
}
'重置'背后的代码按钮看起来像这样:
,fn: function (response) {
if (response == 'yes') {
// clear the state management for the grid
Ext.state.Manager.clear(grid.stateId);
//get default cols
var cols = grid.initialConfig.columns;
Util.logInfo('class value : ' + cols[0].cls + ' tableId : ' + grid.tableId + ' grid.columns ' + grid.columns[0].cls);
//cols = "portlet.packageList.packageListTable.PackageForOutletTable.id"
// repaint the grid using the hardcoded defaults
grid.reconfigure(grid.getStore(), cols);
//reset the filtering on the data
grid.store.clearFilter();
//reset the visual elements in the header
grid.filters.clearFilters();
grid.view.refresh();
}
}
代码有效地从initialConfig获取列,并通过调用grid.reconfigure(..)重置列,这会很好地重置事物。
这个功能已经非常出色了:) ...但是我们的测试自动化团队已经存在问题。单击重置按钮后,所有 cls 值都与上次创建的网格实例相同,这让我相信 initialConfig 更像是一个全局对象
我在这个JSFiddle中遇到了错误:
你可以看到,如果你点击“重置”'在第二个选项卡中,所有内容都匹配:列和initialConfig.column具有相同的值。但是,如果单击第一个选项卡,则initialConfig中列的 cls 值与网格列对象的cls值不同。
问题是如何处理这个问题。是initialConfig对象,以及网格类型的所有实例共有的对象吗?我该如何解决我的问题?
答案 0 :(得分:1)
问题不在于您的initialConfig
对象是常见的,而是columns
数组很常见。您将列定义为基础对象的一部分。创建的每个myGrid
在其initComponent
期间使用相同的数组。
在你的小提琴中,在创建两个myGrid
组件后查看结果:
v1.initialConfig.columns === v2.initialConfig.columns
以下是您的问题的两种解决方案:
在columns
函数中定义initComponent
。这将确保为每个组件(http://jsfiddle.net/GQULg/5/)创建单独的columns
数组。
initComponent: function () {
this.columns = [{
dataIndex: 'id',
text: 'ID'
}, {
dataIndex: 'name',
text: 'Name',
filter: {
type: 'string'
}
}];
//...the rest
}
在您创建columns
组件时定义myGrid
。为了减少代码重复,您可以编写一个函数来返回一个相同(但不相等)的columns数组实例(http://jsfiddle.net/GQULg/6/)
/**
* Define Columns
*/
function getColumnCfg() {
return [{
dataIndex: 'id',
text: 'ID'
}, {
dataIndex: 'name',
text: 'Name',
filter: {
type: 'string'
}
}];
}
var v1 = Ext.create('myGrid', {
myGridId: 'myGrid1',
columns: getColumnCfg()
}
);
var v2 = Ext.create('myGrid', {
myGridId: 'myGrid2',
columns: getColumnCfg()
}
);