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