gpt4 book ai didi

javascript - ExtJS:Ext.Window Prototypal继承的对象无法被销毁

转载 作者:行者123 更新时间:2023-12-03 12:33:36 26 4
gpt4 key购买 nike

[ExtJS 3.4.0]我有一个具有 Ext.Window 原型(prototype)继承的类,如下所示:

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;

当显示此窗口时,可以通过按 CancelButtonExt.Window 的内置“x”按钮将其关闭。

当我使用CancelButton关闭它时,SaveButtonCancelButton被销毁通常情况下。但是,如果由“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通过不同方式销毁时不是同一个对象?
  • 如果我想要/需要保留继承权,我有哪些解决方案/选项?

给我一​​些启发是我最感激的。预先感谢您。

最佳答案

如果我们停留在 Ext 3.4.0 边界内,而不返回到纯 JavaScript,那么您就没有正确完成继承。继承已经在 Ext 中实现了,因此您不需要深入了解原型(prototype)、创建构造函数作为父类的实例等。

假设您要定义继承自 Ext.WindowMyWindow 类:

Ext.define('MyWindow',{
extend:'Ext.Window'
,method:function(){/* some stuff */}
,closable:false // don't create close box
,closeAction:'hide'
// etc
});

创建实例:

var win = Ext.create('MyWindow', {
width:800
,height:600
});
win.show();

有关更多信息,请参阅 Ext.define文档。

关于javascript - ExtJS:Ext.Window Prototypal继承的对象无法被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23824144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com