0

ExtJS は初めてで、コンテキスト メニューを追加した TreePanel があります。私の TreePanel とコンテキスト メニューは次のように定義されています。

Ext.define('UserMgmt.view.rightContainer', {
    extend: 'Ext.container.Container',
    alias: 'widget.rightcontainer',

    initComponent: function() {
        var me = this;

        // context menu for TreePanel
        var contextMenu = new Ext.menu.Menu({
            itemId: 'contextMenuForTreePanel',
            items: [
                {
                    text: 'Expand all',
                    itemId: 'expandAllNodes'
                },
                {
                    text: 'Collapse all',
                    itemId: 'collapseAllNodes'
                }
            ]
        });

        Ext.applyIf(me, {
            items: [
                {
                    xtype: 'treepanel',
                    itemId: 'myTreePanel',
                    columns: [
                        {
                            xtype: 'treecolumn',
                            dataIndex: 'name',
                        },
                        {
                            xtype: 'gridcolumn',
                            dataIndex: 'permission',
                        }
                    ],
                    listeners: {
                        itemcontextmenu : {
                            fn: function(view, record, item, index, event) {
                                console.log("Right-clicked on " + record.get('name'));
                                contextMenu.showAt(event.getXY());
                                event.stopEvent();
                            }
                        }
                    }
                }
            ]
        });

        me.callParent(arguments);
    }
});

これは私が期待するように機能しています。ツリー ノードを右クリックすると、[すべて展開] および [すべて折りたたむ] メニュー項目を含むコンテキスト メニューがポップアップ表示されます。私が問題を抱えているのは、コンテキスト メニュー項目のコントローラーにイベント ハンドラーを接続することです。

私のコントローラーでは、次のようにイベント ハンドラーを接続しています。

init: function() {
    this.control({
        'combobox#myComboBox': {
            select: this.onComboBoxSelect
        },
        'treepanel#myTreePanel': {
            itemclick: this.onTreePanelItemClick
        }
    });
}

これらのイベント ハンドラは正常に動作しています。残念ながら、コンテキスト メニュー項目に一致するコンポーネント クエリを思いつくことができないようです。そのため、それらのクリック イベント ハンドラを接続することができます。私はそれが次のようなものになると思っていました:

contextMenuForTreePanel#expandAllNodes

また

rightcontainer#expandAllNodes

ただし、これらはどちらも適切に機能していないようです。誰が私が間違っているのか教えてもらえますか? ありがとう!

4

1 に答える 1

1

コンテキスト メニューは、ツリー パネルの子項目ではありません。それにもかかわらず、 itemId をそれに割り当てると、次の方法で取得できます#contextMenuForTreePanel

于 2014-04-29T18:27:17.673 に答える