Ext.window.MessageBox draggable false,调用hide方法出错

Posted

技术标签:

【中文标题】Ext.window.MessageBox draggable false,调用hide方法出错【英文标题】:Ext.window.MessageBox draggable false, error calling hide method 【发布时间】:2014-12-04 15:04:28 【问题描述】:

像这样创建 MessageBox 的实例后

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)中)

有什么想法或方法吗?

【问题讨论】:

嗯。你确定你使用的是股票 Ext.window.MessageBox 吗?我正在查看源代码,它看起来与您在此处发布的完全不同。 true 这已在 4.2.2 上修复,感谢您的澄清。这是 4.2.1 之前的问题 【参考方案1】:

为了避免这个错误,我重写了 MessageBox 类的 hide 方法:

        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();
    
);

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

【讨论】:

以上是关于Ext.window.MessageBox draggable false,调用hide方法出错的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS4学习笔记1

Ext.js中组件简要说明

Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理

消息框显示方法上的 ExtJS callParent 不起作用

美国薪资最高的技术技能:GolangKafkaDynamoDBRedshiftCassandra

dra7xx: configure for rtos usecase to bulild