网格问题中的initialConfig

时间:2014-07-23 10:04:20

标签: extjs extjs4.2

在我的网格中,我将 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中遇到了错误:

http://jsfiddle.net/GQULg/4/

你可以看到,如果你点击“重置”'在第二个选项卡中,所有内容都匹配:列和initialConfig.column具有相同的值。但是,如果单击第一个选项卡,则initialConfig中列的 cls 值与网格列对象的cls值不同。

问题是如何处理这个问题。是initialConfig对象,以及网格类型的所有实例共有的对象吗?我该如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

问题不在于您的initialConfig对象是常见的,而是columns数组很常见。您将列定义为基础对象的一部分。创建的每个myGrid在其initComponent期间使用相同的数组

在你的小提琴中,在创建两个myGrid组件后查看结果:

v1.initialConfig.columns === v2.initialConfig.columns

以下是您的问题的两种解决方案:

  1. 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
    }
    
  2. 在您创建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() 
        }
    );