我是 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
然而,这些似乎都没有正常工作。谁能告诉我我做错了什么?谢谢!