面板监听器在其内部打开窗口时

时间:2013-02-20 18:14:17

标签: extjs4.1

我有一个充当桌面的Panel。单击按钮时,面板内会打开一个窗口。我在配置中设置了以下内容:

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

所以我的窗口在主面板中打开并受到限制。我希望面板在其中打开任何窗口时监听,以便我可以监控它。有没有听众会这样做?我尝试了“添加”和“添加”,但必须通过以下方式将窗口添加到面板中:

panel.add(window);

但在我的情况下,我没有将它添加到容器中,但我打开它并使用renderTo将其约束到我的容器。

1 个答案:

答案 0 :(得分:1)

我要做的是为您的桌面创建panel的子类,为您的Windows创建window的子类。将“windowOpened”侦听器添加到自定义面板,然后从自定义窗口的“show”侦听器中触发此事件。

这样的事情:

<强> 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();