2013-02-20 48 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