2013-02-20 80 views
0

我有一個面板作爲桌面。當點擊一個按鈕時,在面板內部打開一個窗口。我在配置中設置了以下內容:在窗戶內部打開窗口時的面板監聽器

var win = Ext.create('window', { 
    renderTo : currentPanel.getLayout().getTarget(), 
    constrain : true 
}); 
win.show(); 

所以我的窗口在主面板中打開並受到約束。我希望面板在任何窗口打開的情況下偵聽,以便我可以監控它。有沒有聽衆會這樣做?我嘗試「添加」和「加入」,但該窗口通過添加到面板:

panel.add(window); 

但在我的情況下,我沒有將它添加到容器,但我打開它和約束它使用renderTo到我的容器。

回答

1

我會做的是爲您的桌面創建panel的子類,併爲您的窗口創建子類window。將「windowOpened」偵聽器添加到自定義面板,並從您的自定義窗口的「顯示」偵聽器中觸發此事件。

事情是這樣的:

DesktopPanel.js

Ext.define('App.view.DesktopPanel', { 
    extend: 'Ext.panel.Panel', 
    alias: 'widget.desktoppanel', 

    initComponent: function() { 
     this.callParent(); 
     this.addListener('windowOpened', function(newWindow){ 
      //Do whatever it is you want to do here 
     }); 
    } 
});  

DesktopWindow.js

Ext.define('App.view.DesktopWindow', { 
    extend: 'Ext.window.Window', 
    alias: 'widget.desktopwindow', 

    constrain: true, 

    initComponent: function() { 
     this.renderTo = this.ownerPanel.getLayout().getTarget(); 
     this.callParent(); 
     this.addListener('show', function(){ 
      this.ownerPanel.fireEvent('windowOpened',this); 
     }); 
    } 
}); 

那麼你的代碼將是這樣的:

var win = Ext.create('App.view.DesktopWindow', { 
    ownerPanel: MyDesktop, //an instance of 'DesktopPanel' 
}); 
win.show(); 
+0

我做了類似的事,謝謝! – codemonkeyww 2013-02-22 14:59:59