9

extjs4 のグリッドの列ヘッダーのドロップダウン メニューにボタンが必要です。データベースにリンクされている列を追加または削除できるようにします。 赤い領域のボタンは、私が探しているものです...

どんな助けでも大歓迎です...ありがとう..:)

4

4 に答える 4

9

私が見てきたことから、afterrender イベントは避けるべきです。

環境:

私が構築しているアプリケーションは、動的モデルを持つストアを使用しています。グリッドに、サーバーからフェッチされるカスタマイズ可能なモデルが必要です (したがって、カスタマイズ可能なグリッドにカスタマイズ可能な列を含めることができます)。

ヘッダーを変更できなかったため (ストアがリロードされ、変更した既存のメニューが破棄されるため - 上記の例を使用)。同じ効果を持つ代替ソリューションは、次のように実行できます。

Ext.create('Ext.grid.Panel', {
    // ...

    initComponent: function () {
        // renders the header and header menu
        this.callParent(arguments);

        // now you have access to the header - set an event on the header itself
        this.headerCt.on('menucreate', function (cmp, menu, eOpts) {
            this.createHeaderMenu(menu);
        }, this);
    },

    createHeaderMenu: function (menu) {
        menu.removeAll();

        menu.add([
            // { custom item here }
            // { custom item here }
            // { custom item here }
            // { custom item here }
        ]);
    }
});
于 2012-07-25T22:54:28.707 に答える
4

「標準」の列メニューを 1 つだけではなく、私のように個々の列ごとに作成したい場合は、次のように使用できます。

initComponent: function ()
{
    // renders the header and header menu
    this.callParent(arguments);

    // now you have access to the header - set an event on the header itself
    this.headerCt.on('menucreate', function (cmp, menu, eOpts) {
        menu.on('beforeshow', this.showHeaderMenu);
    }, this);
},

showHeaderMenu: function (menu, eOpts)
{
    //define array to store added compoents in
    if(this.myAddedComponents === undefined)
    {
        this.myAddedComponents = new Array();
    }

    var columnDataIndex = menu.activeHeader.dataIndex,
        customMenuComponents = this.myAddedComponents.length;

    //remove components if any added
    if(customMenuComponents > 0)
    {
        for(var i = 0; i < customMenuComponents; i++)
        {
            menu.remove(this.myAddedComponents[i][0].getItemId());
        }

        this.myAddedComponents.splice(0, customMenuComponents);
    }

    //add components by column index
    switch(columnDataIndex)
    {
        case 'xyz': this.myAddedComponents.push(menu.add([{
                            text: 'Custom Item'}]));

                break;
    }
}
于 2012-10-30T19:38:54.040 に答える