Javascript 如何访问父组件ExtJS?

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

由于某些原因,当下面的浮动面板失去焦点时,模糊事件不会触发。但是,当我为blur事件监听面板的“el”时,它会被注册,如listeners配置中所示。我要做的是在发生模糊事件时隐藏面板。如何访问父面板

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,随心所欲地获取组件