我正在尝试将菜单链接起来。 看看:
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
}
}
]
}
});
在线示例: http://jsfiddle.net/RobertoSchuster/mGLVF/
有什么想法吗?
答案 0 :(得分:6)
我正在学习EXT,所以我不太确定发生了什么,但我认为我能够这样做:console.log(MyMenu.floatParent.id)
;
答案 1 :(得分:3)
在我们的ExtJS 4项目中,我们最终修改了up()
上的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');
。
答案 2 :(得分:1)
试试这个:
Ext.getCmp('My-Button').menu.refOwner
答案 3 :(得分:1)
var MyButton = MyItemMenu3.up('button');
或ExtJS3:
var MyButton = MyItemMenu3.findParentByType('button');
答案 4 :(得分:0)
在最新版本的ExtJS中,至少(4.2),每个Ext.menu.Item都有一个parentMenu
属性,可以访问父菜单。您可以将其子类化为自定义菜单项。