[ExtJS 3.4.0]
我有一个对Ext.Window
有原型无效的课,类似这样:
function Cls_MyWindow() {
.....
var SaveButton = new Ext.Button({...});
var CancelButton= new Ext.Button({...});
.....
Cls_MyWindow.prototype.width = Ext.getBody().getWidth() - 800;
Cls_MyWindow.prototype.height = Ext.getBody().getHeight() - 350;
Cls_MyWindow.prototype.plain = true;
Cls_MyWindow.prototype.buttons = [SaveButton, CancelButton];
.....
}
Cls_MyWindow.prototype = new Ext.Window;
Cls_MyWindow.prototype.constructor = Ext.Window;
显示此窗口时,可以通过按CancelButton
或内置" x"来关闭它。 Ext.Window
按钮。
当我以CancelButton
关闭它时,SaveButton
和CancelButton
正常销毁。
但是,如果被" x"关闭按钮,按钮无法销毁,循环将永远导致我的应用程序崩溃。
经过一些调查,我发现,在 ext-all-debug.js 中,这个:
Ext.Panel = Ext.extend(Ext.Container, {
.....
if(Ext.isArray(this.buttons)){
while(this.buttons.length) {
Ext.destroy(this.buttons[0]);
}
}
.....
}
调用Ext.destroy
,这个:
Ext.apply(Ext, function(){
.....
destroy : function(){
Ext.each(arguments, function(arg){
if(arg){
if(Ext.isArray(arg)){
this.destroy.apply(this, arg);
}else if(typeof arg.destroy == 'function'){
arg.destroy();
}else if(arg.dom){
arg.remove();
}
}
}, this);
},
.....
}());
似乎是,this.buttons
- 来自按下CancelButton-是Ext.Component因此,它会被正常销毁。
虽然this.buttons
- 来自" x" - 不是,导致问题。
this.buttons
在通过不同方式销毁时不是同一个对象?对我说一些灯是非常感激的。提前谢谢。
答案 0 :(得分:1)
如果我们保持在Ext 3.4.0边界内,没有回到普通的javascript,那么你还没有正确完成继承。继承已在Ext中实现,因此您无需转到原型,将构造函数创建为父类的实例,等等。
我们假设您要定义继承自MyWindow
的{{1}}类:
Ext.Window
创建实例:
Ext.define('MyWindow',{
extend:'Ext.Window'
,method:function(){/* some stuff */}
,closable:false // don't create close box
,closeAction:'hide'
// etc
});
有关详细信息,请参阅Ext.define文档。
答案 1 :(得分:0)
几天后,我找到了Inheritance using prototype / “new”的答案。 底部的第一个代码块周围的代码是我弄错的地方。
Cls_MyWindow.prototype = new Ext.Window;
Cls_MyWindow.prototype.constructor = Ext.Window;
" 新" at" new Ext.Window"操作员有我的错误。
<强>答案:强>
由于new运算符,当我创建Cls_MyWindow
的新实例时,总共有2个构造函数被调用:Cls_MyWindow
之一,Ext.Window
的另一个。{1}}。然后使他们拥有&#34;他们自己的按钮原型&#34;其中 SaveButton 和 CancelButton 在Cls_MyWindow
Ext.Button
对象和Ext.Window
中以普通对象的形式提供
使用CancelButton关闭Cls_MyWindow - &gt;这些按钮可以在Ext.Window.destroy的方式中销毁。用&#34; x&#34;关闭它 - &GT;按钮无法销毁。
<强>解决方案:强> 我将代码更改为
//Cls_MyWindow.prototype = new Ext.Window; the old one
Cls_MyWindow.prototype = Ext.Window.prototype;
Cls_MyWindow.prototype.constructor = Ext.Window;
一切都很完美