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。
答案 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
。如果您找到改进方法(或修复错误!),请告诉我。