ExtJS窗口setActive()无法按预期工作

时间:2012-07-03 11:25:44

标签: javascript extjs extjs4 extjs4.1

TL / DR

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

完整详情:

我有以下从Ext.window.Window继承的ExtJS类:

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.active行之前是true。执行该行后,它仍然是true。我正在使用ExtJS 4.1。

2 个答案:

答案 0 :(得分:0)

源代码中没有设置true或false的活动属性,也没有在文档中提及。

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

答案 1 :(得分:0)

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

我已经编写了一个(并构建了额外的功能)DesktopMgr小部件,它继承自Ext.util.MixedCollection,并充当“桌面管理器”,其中“桌面”意味着任何ExtJS容器意味着处理多个窗口,激活,停用,导航到上一个/下一个等等。

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