我有这段代码:
qx.Class.define('my.Window', {
extend: qx.ui.window.Window,
construct: function(caption, icon) {
this.base(arguments, caption, icon);
this.setLayout(new qx.ui.layout.Basic());
this.__btn = new qx.ui.form.Button('Shortcut Test');
this.__cmd = new qx.ui.command.Command('Alt+T');
this.__cmd.addListener("execute", function() { alert('FOOBAR'); });
this.__btn.setCommand(this.__cmd);
this.add(this.__btn);
},
members: {
__btn: null,
__cmd: null
}
});
qx.Class.define('my.Compo', {
extend: qx.ui.container.Composite,
construct: function() {
this.base(arguments);
this.setLayout(new qx.ui.layout.HBox());
this.__btnShow = new qx.ui.form.Button("Show Window", "icon/22/apps/internet-web-browser.png");
this.__btnDestroy = new qx.ui.form.Button('Destroy window');
this.__btnNull = new qx.ui.form.Button('Null window');
this.__btnDestroy.addListener('execute', function(){
this.__window.destroy();
}, this);
this.__btnNull.addListener('execute', function(){
this.__window = null;
}, this);
this.__btnShow.addListener("execute", function(e){
if(this.__window) {
console.info('Window exist');
this.__window.open();
this.__window.center();
}
else {
console.info('Window do not exist!');
this.__window = new my.Window("Shortcut test window");
this.__window.setWidth(300);
this.__window.setHeight(200);
this.__window.setShowMinimize(false);
this.__window.open();
this.__window.center();
}
}, this);
this.add(this.__btnShow);
this.add(this.__btnDestroy);
this.add(this.__btnNull);
},
members: {
__btnShow: null,
__btnDestroy: null,
__window: null
}
});
var compo = new my.Compo();
this.getRoot().add(compo);
因此,如果您在单击“显示窗口”按钮之前尝试“Alt + T”快捷方式,则不会发生任何事情。显示窗口后,快捷方式可用,并显示警告。
嗯,对我来说问题是在快捷方式不再存在的情况下,快捷方式的剩余可用性:
destroy()
方法。谢谢你的所有时间。 :)
答案 0 :(得分:2)
qx.ui.command.Command 将{em> qx.bom.Shortcut 包裹attaches 2 listeners到文档元素。当您关闭窗口 qx.ui.command.Command 时,实例未设置为非活动状态或已销毁。您必须正确处理窗口关闭事件。
destruct: function()
{
this.__cmd = null;
}
它不会破坏命令。如果您尝试:
qx.core.ObjectRegistry.fromHashCode("the command object hash code").getActive()
您会发现它存在且处于活动状态。你忘了销毁调用命令
this.__cmd.dispose()