0

Ext.grid.Panelを拡張するグリッドAを実装し、グリッド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は閉じることができます(また、タブスルーボタンで再追加することもできます)。[閉じる]ボタンをクリックすると正常に閉じますが、GridsPanelをタブに再度追加すると、グリッドAはすべての子グリッドの最後に2つの列を追加します。実際には、グリッドAは2つの列を追加しませんが、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 に答える