Javascript 如何访问父组件ExtJS?
由于某些原因,当下面的浮动面板失去焦点时,模糊事件不会触发。但是,当我为blur事件监听面板的“el”时,它会被注册,如listeners配置中所示。我要做的是在发生模糊事件时隐藏面板。如何访问父面板Javascript 如何访问父组件ExtJS?,javascript,extjs,scope,Javascript,Extjs,Scope,由于某些原因,当下面的浮动面板失去焦点时,模糊事件不会触发。但是,当我为blur事件监听面板的“el”时,它会被注册,如listeners配置中所示。我要做的是在发生模糊事件时隐藏面板。如何访问父面板 Ext.define('NoteKeeper.view.tabs.AttachmentPanel',{ extend : 'Ext.panel.Panel', alias : 'widget.attachmentPanel', itemId : 'attachmentPan
Ext.define('NoteKeeper.view.tabs.AttachmentPanel',{
extend : 'Ext.panel.Panel',
alias : 'widget.attachmentPanel',
itemId : 'attachmentPanel',
floating : true,
focusable : true,
width : 200,
height : 150,
layout : {
type : 'vbox'
},
items : [
{
xtype : 'grid',
store : null,
columns : [
{
text : 'File Name',
dataIndex : 'fileName'
},
{
dataIndex : 'remove'
}
]
},
{
xtype : 'button',
text : '+'
}
],
listeners : {
el: {
blur: {
fn: function()
{
console.log( this );
//how do I access the 'attachmentPanel' from here
//so I can hide it ?
}
}
}
},
noteId : null,
initComponent : function()
{
this.callParent(arguments);
}
});
请注意,这些“attachmentPanel”可能有多个实例。以下各项似乎可以正常工作:
listeners : {
el: {
blur: {
fn: function()
{
console.log(this);
var elId = this.id;
var attachmentPanels = Ext.ComponentQuery.query('#attachmentPanel');
Ext.Array.forEach( attachmentPanels, function(cmp){
if(cmp.id == elId)
{
cmp.hide();
return false;
}
});
}
}
}
请告诉我是否有更好/更有效的解决方案。谢谢 有一个从元素到所属组件的引用,以
组件
属性的形式,因此从元素的范围,您可以访问面板,如下所示:
var attachmentPanel = this.component;
在组件上使用
focusleave
事件:@EvanTrimboli不幸的是,上面的操作不起作用。当我点击+号和浮动面板内的某个地方时,模糊事件仍会触发。看起来,焦点附着在面板内的按钮上,而不是面板本身。将模糊附加到el效果更好,但单击按钮会导致el失去焦点。你们知道解决这个问题的方法吗?你们可以使用focus-leave,随心所欲地获取组件