0

我已经实现了扩展 Ext.grid.Panel 的网格 A 并实现了一些扩展网格 A 的其他网格。对于所有扩展网格 A 的网格,我通过其父网格的构造函数向它们添加了一个额外的列(网格一个)

constructor: function() {       

    this.columns.push({
        xtype: 'gridcolumn',
        //id: 'removeColumn',
        header: '',
        sortable: false,
        dataIndex: 'action',
        width: 25,
        renderer: function (action, metaData, record, row, col, store, gridView) {
            if (action == 'add') return icon = '<img style="height: 15px;width: 15px;"  src="images/add.png"/>';
            else return icon = '<img style="height: 15px;width: 15px;"  src="images/close.png"/>';
        }

    });

    this.callParent(arguments);
}

所以上面的代码在网格 A 的所有子网格的末尾添加了一个额外的列。我已经在一个面板上添加了所有这些网格(比如 GridsPanel ),这些网格进一步添加到一个选项卡中。GridsPanel 是可关闭的(也可以通过按钮在 Tab 中重新添加)。单击关闭按钮时,它会成功关闭,但是每当我将 GridsPanel 重新添加到选项卡时,网格 A 在所有子网格的末尾添加两列。事实是 Grid A 没有添加两列,但是在关闭 GridsPanel 之前添加的列仍然存在并且没有被删除。类似地,关闭 GridsPanel 并通过单击按钮再次创建它将向子网格添加另一列,从而使添加的列总数为 3。

4

1 回答 1

0

我得到了解决方案,并想与其他人分享它,因为它可能会帮助其他人。问题实际上在于在构造函数中每个子网格的末尾添加了额外的列。在网格事件中添加额外的列viewready解决了这个问题。

viewready: function(object){

        column = {
            xtype: 'gridcolumn',
            //id: 'removeColumn',
            detachOnRemove : false,
            header: '',
            sortable: false,
            dataIndex: 'action',
            width: 25,
            renderer: function (action, metaData, record, row, col, store, gridView) {
                if (action == 'add') return icon = '<img style="height: 15px;width: 15px;"  src="images/add.png"/>';
                else return icon = '<img style="height: 15px;width: 15px;"  src="images/close.png"/>';
            }

        };

        object.headerCt.insert(object.columns.length, column);
        object.getView().refresh();
}

因此,以这种方式添加列会完全破坏网格及其列。

于 2012-11-15T10:04:12.930 回答