失去焦点时自动关闭 ExtJS Window

Automatically Close ExtJS Window When Losing Focus

我有一个可以在我的应用程序中打开的小 window,它允许用户执行琐碎的任务,当用户在 window 之外单击时,我想简单地关闭它。一些示例建议在后台监听点击事件 "mask" - 除了感觉有点老套之外,这不是一个选项,因为 window 未配置因为modal因为它的功能是non-blocking,我不想限制它后面的UI。

我最初尝试挂钩到 blur 事件,但是在 ExtJS 5+ 中行为是喜怒无常的,即 以下示例 (fiddle),请尝试在 window.

之外拖动或单击
var win = Ext.create('Ext.window.Window', {
    width: 500,
    height: 250,
    items: {
        xtype: 'box',
        padding: 20,
        html: 'Test window...'
    }
});
win.on('blur', win.close, win);
win.show();

是否有一些其他配置或巧妙的解决方案可以解决这两个问题,cross-version?

我没有与组件的 focus 状态作斗争,而是选择了以下 MVC 设置,它侦听全局点击事件,然后确定用户是否点击了 window。

Ext.define('App.window.DismissableWindow', {
    extend: 'Ext.window.Window',
    controller: 'dismissableWindow'
    // config ...
});
Ext.define('App.window.DismissableWindowController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.dismissableWindow',

    listen: {
        global: {
            mousedown: 'dismissWindowCheck'
        }
    },

    dismissWindowCheck: function(ev){
        var view = this.getView();
        if(!view.owns(ev.getTarget()))
            view.close();
    }
});

» Fiddle