取消阻止小部件而不会失去焦点

时间:2016-12-06 08:33:41

标签: qooxdoo

1 个答案:

答案 0 :(得分:1)

我不太确定你试图实现的目标是qx.ui.core.Blocker的用途。该实现不考虑在块期间移动焦点。

如果您调用方法block,代码会尝试确定在块完成之前聚焦的窗口小部件并保存该窗口小部件,然后将焦点设置为要阻止的窗口小部件并在解锁时将焦点恢复到已保存的小部件。

如果在子类中添加少量内容,则可以避免焦点保存/恢复:

  qx.Class.define("qx.ui.core.MyBlocker",
  {
    extend : qx.ui.core.Blocker,

    properties : {

      backupActiveWidget :
      {
        check : "Boolean",
        init : true
      }

    },

    members : {  
      // overridden
      _backupActiveWidget : function() {
        if(this.getBackupActiveWidget() === false) {
          return
        }

        this.base(arguments);
      }
    }
  });

并以这种方式使用阻止程序:

var blocker = new qx.ui.core.MyBlocker(widgetToBeBlocked);
blocker.setBackupActiveWidget(false);

这可以防止阻止者窃取可能在阻止期间设置的焦点。