如何在Qooxdoo上分离快捷命令?

时间:2016-06-23 19:06:47

标签: qooxdoo

我有这段代码:

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”快捷方式,则不会发生任何事情。显示窗口后,快捷方式可用,并显示警告。

嗯,对我来说问题是在快捷方式不再存在的情况下,快捷方式的剩余可用性:

    • 当窗口正常关闭时。
    • 执行Null窗口按钮时,如果使用“Alt + T”,则会显示警报两次,依此类推,在Null和Show按钮之间切换。
    • 与(2)相同的行为即使明确调用窗口的destroy()方法。
    • 在操场上如果多次点击“运行”按钮,使用快捷方式后也会显示相同的时间。
  1. 谢谢你的所有时间。 :)

    On Playground

1 个答案:

答案 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()

每次有人推动"运行"时,Qooxdoo Playground App对象注册表都不会被初始化。因此,qooxdoo对象的生命周期与页面生命周期或处置事件有关。