2017-08-21 16 views
0

何らかの理由で、フローティングパネルの下にフォーカスが失われても、ブラーイベントが発生しません。しかし、ブラーイベントのパネルの 'el'を聞くと、リスナー設定に表示されるように登録されます。私がしたいことは、ブラーイベントが発生したときにパネルを非表示にすることです。親パネルへのアクセス方法を教えてください。親コンポーネントExtJSにアクセスするには?

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'のインスタンスが複数存在することがあります。

+0

は 'focusleave'を使用しますイベント:コンポーネント:https://fiddle.sencha.com/#view/editor&fiddle/25d2 –

+0

@EvanTrimboli残念ながら、上記は機能しません。 +記号とフローティングパネルのどこかをクリックすると、ブラーイベントはまだ発生します。表示されるのは、パネル自体ではなく、パネル内部のボタンにフォーカスが置かれているようです。ぼかしをelにアタッチすると、より効果的ですが、ボタンをクリックすると、elにフォーカスが失われます。あなたはその周りに道を知っていますか? – Pepria

答えて

0

次は正常に動作するように見える:

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; 
         } 
        }); 
       } 
      } 
     } 

より良い/より効率的な解決策がある場合は私に知らせてください。ありがとう!

+1

フォーカス離脱を使用し、必要に応じてコンポーネントを取得[クリック](https://fiddle.sencha.com/#view/editor&fiddle/25d7) –

0

要素の範囲から、あなたがそうのようなパネルにアクセスできるように所有コンポーネントへの要素からの参照は、component財産の形で、あります:

var attachmentPanel = this.component; 
関連する問題