Extjs 如何获取菜单的父级?
我正在尝试获取链接菜单的组件。 看一看:Extjs 如何获取菜单的父级?,extjs,extjs4,extjs3,Extjs,Extjs4,Extjs3,我正在尝试获取链接菜单的组件。 看一看: Ext.create('Ext.Button', { id: 'MyButton', text: 'Click me', renderTo: Ext.getBody(), menuAlign: 'tl-bl', menu: { itemId: 'MyMenu', forceLayout: true, items: [
Ext.create('Ext.Button', {
id: 'MyButton',
text: 'Click me',
renderTo: Ext.getBody(),
menuAlign: 'tl-bl',
menu: {
itemId: 'MyMenu',
forceLayout: true,
items:
[
{
text : 'Option 1',
itemId: 'MyItemMenu1'
}, {
text : 'Option 2',
itemId: 'MyItemMenu2'
}, {
text : 'Get the parent!',
itemId : 'MyItemMenu3',
handler: function(){
// Get the item menu.
var MyItemMenu3 = this;
alert(MyItemMenu3.getItemId());
// Get the menu.
var MyMenu = MyItemMenu3.ownerCt;
alert(MyMenu.getItemId());
// Try to get the button.
var MyButton = MyMenu.ownerCt;
alert(MyButton);
// Returns:
// 'MyItemMenu3'
// 'MyMenu'
// undefined
}
}
]
}
});
在线示例:
有什么想法吗?试试这个:
Ext.getCmp('My-Button').menu.refOwner
或者对于ExtJS3:
var MyButton = MyItemMenu3.findParentByType('button');
我自己也在学习EXT,所以我不太确定到底发生了什么,但我想我可以这样理解:
console.log(MyMenu.floatParent.id)
在我们的ExtJS4项目中,我们最终只是修补了AbstractComponent
Ext.AbstractComponent.override({
up: function(selector) {
var result = this.ownerCt||this.floatParent;
if (selector) {
for (; result; result = result.ownerCt||result.floatParent) {
if (Ext.ComponentQuery.is(result, selector)) {
return result;
}
}
}
return result;
}
});
这使得up()
沿着ownerCt
链向上走,但如果未定义ownerCt
,它将查找floatParent
现在您可以调用
cmp.up('some-selector')
即使它是一个菜单或菜单项。在最新版本的ExtJS中,至少(4.2),每个Ext.menu.item都有一个可以访问父菜单的parentMenu
属性。您可以将其子类化为自定义菜单项。我自己也在学习EXT,所以我不太确定到底发生了什么,但我想我可以这样得到它:console.log(MyMenu.floatParent.id);完美的它起作用了!谢谢。好的,我会把它作为一个答案提交给你:)很高兴它对你有用!我尝试了这两种方法,但总是返回未定义。它与MyMenu.floatParent一起工作。(:谢谢。是的,我会认为我的简单电话可以解决问题。但是没有:)谢谢你的回答。。。施了魔法
Ext.AbstractComponent.override({
up: function(selector) {
var result = this.ownerCt||this.floatParent;
if (selector) {
for (; result; result = result.ownerCt||result.floatParent) {
if (Ext.ComponentQuery.is(result, selector)) {
return result;
}
}
}
return result;
}
});