创建像此一样的MessageBox实例
var msgBox = Ext.create('Ext.window.MessageBox',{draggable: false});
-actually draggable 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上修复))
有任何想法或意见吗?
答案 0 :(得分: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();
}
});
我愿意接受避免这种覆盖的建议。感谢。