Ext.window.MessageBox 可拖动 false,调用隐藏方法时出错

Ext.window.MessageBox draggable false, error calling hide method

本文关键字:隐藏 调用 方法 出错 false window MessageBox 拖动 Ext      更新时间:2023-09-26

像这样创建消息框实例后

var msgBox = Ext.create('Ext.window.MessageBox',{draggable: false}); 

-实际上可拖动的 false 是通过对 Ext.window.window 的覆盖设置的,我这样说是为了更容易重现。

- 我也更喜欢单例语法,但在我正在处理的代码中已经有大量这样的实例。

   msgBox.alert("I am a bug, try to close me to reproduce");

尝试关闭此 MessabeBox 调用 hide 方法:

hide: function() {
        var me = this;
        me.dd.endDrag();
        me.progressBar.reset();
        me.removeCls(me.cfg.cls);
        me.callParent(arguments);
    },

引发以下错误:

无法读取未定义的属性"endDrag"

我错过了什么还是这是一个错误?

更新:

我正在使用 ExtJs 4.1.1(

但也发生在 Extjs 4.2.1(固定在 4.2.2 上))

任何想法或意见 ?

为了避免此错误,我正在覆盖 MessageBox 类上的隐藏方法:

        Ext.define('Ext.window.MessageBox', {
            override: 'Ext.window.MessageBox',
            hide : function () {
                /**
                 * this is the default implementation of hide in minus MessageBox the commented line
                 * */
                var me = this;
                //me.dd.endDrag();
                me.progressBar.reset();
                me.removeCls(me.cfg.cls);
                /**
                 * this is the implementation of hide in Ext.Component
                 * avoided callParent() because that would have called the overridden hide method
                */
                me.showOnParentShow = false;
                if (!(me.rendered && !me.isVisible()) && me.fireEvent('beforehide', me) !== false) {
                    me.hidden = true;
                    if (me.rendered) {
                        me.onHide.apply(me, arguments);
                    }
                }
                return me;
            }
        });

更新,这是原始覆盖

Ext.window.Window.override({
    initComponent: function () {
        this.draggable = false;
        this.resizable = false;
        this.callParent();
    }
});

我愿意接受避免这种覆盖的建议。谢谢。