1

TL/DR:

调用window.setActive(false)不会将窗口的active属性设置为false

完整详情:

我有以下 ExtJS 类继承自Ext.window.Window

Ext.define('WD.view.TbWindow', {
    extend : 'Ext.window.Window',
    isTbWindow: true,

    title: 'Set Me!!',
    constrain: true, // constrain window to viewport
    autoShow: false,
    maximizable: true,
    minimizable: true,

    renderTo: 'main_panel-body',

    minimize: function() {
        this.hide();
        this.setActive(false);
        this.animateTarget.handleWinMinimize();
    },

    ...

});

minimize上面的函数中有调用this.setActive(false);

我使用 Chrome 开发者工具来调试代码。在执行该行之前this.activetrue. 行执行后它仍然是true. 我正在使用 ExtJS 4.1。

4

2 回答 2

0

源代码中没有设置 true 或 false 的 active 属性,文档中也没有提到它。

setActive: function(active, newActive) {
    var me = this;

    if (active) {
        if (me.el.shadow && !me.maximized) {
            me.el.enableShadow(true);
        }
        if (me.modal && !me.preventFocusOnActivate) {
            me.focus(false, true);
        }
        me.fireEvent('activate', me);
    } else {
        // Only the *Windows* in a zIndex stack share a shadow. All other types of floaters
        // can keep their shadows all the time
        if (me.isWindow && (newActive && newActive.isWindow)) {
            me.el.disableShadow();
        }
        me.fireEvent('deactivate', me);
    }
}
于 2012-07-06T11:34:50.740 回答
0

问题出在Ext.WindowManager.getActive()方法上。事实上,在 Web 桌面示例中,Sencha 家伙实际上做了一些不太好的编码来获得实际的活动窗口。我复制了该代码,并开始在我的代码中支持 windows 数组,这解决了我的问题。

我编写了一个(并在其中内置了额外的功能)一个DesktopMgr小部件,它继承自Ext.util.MixedCollection并充当“桌面管理器”,其中“桌面”表示任何用于处理多个窗口、激活、停用、导航到上一个/下一个等

DesktopMgr您可以从此gist下载和使用。如果您找到改进它的方法(或要修复的错误!),请告诉我。

于 2012-12-01T17:25:20.217 回答