如何使用 ExtJS 销毁对象的所有实例?

Posted

技术标签:

【中文标题】如何使用 ExtJS 销毁对象的所有实例?【英文标题】:How to destroy all instances of a object with ExtJS? 【发布时间】:2013-08-02 11:44:45 【问题描述】:

我使用 ExtJS 框架创建了 2 个类似的面板(我知道这不是最好的方法):

var panel = Ext.create("Ext.panel.Panel", 
                title: "first panel",
                width: 400,
                height: 250,
                renderTo: Ext.getBody(),
                html: "test 1"
            );

panel = Ext.create("Ext.panel.Panel", 
                title: "second panel",
                width: 400,
                height: 250,
                renderTo: Ext.getBody(),
                html: "test 2"
            );

现在我的浏览器中有 2 个面板。现在如果我这样做:

panel.destroy();

它只破坏最后一个。 所以我的问题是:我怎样才能摧毁第一个面板?有没有一种方法可以包含浏览器中的所有面板?我是否每次都存储 ID 的面板以便以后销毁它们?...

【问题讨论】:

【参考方案1】:

试试这个:

var objArray = Ext.ComponentQuery.query("Ext.panel.Panel");

objArray 包含所有面板对象。

现在运行for 循环并销毁所有对象。

【讨论】:

感谢您的宝贵帮助,这正是我想要的!【参考方案2】:

如果您将它们设为不同的变量(或您管理的数组),您可以单独销毁它们:

var panel1 = Ext.create("Ext.panel.Panel", 
    ...
);

var panel2 = Ext.create("Ext.panel.Panel", 
    ...
);

panel1.destroy();
panel2.destroy();

或者这个:

var panels = [];
var panels[0] = Ext.create("Ext.panel.Panel", 
    ...
);

var panels[1] = Ext.create("Ext.panel.Panel", 
    ...
);

for (var i=0; i<panels.length; i++)

    panels[i].destroy();

【讨论】:

感谢您的回答凯文德。我在发帖之前已经尝试过这种方法。您知道销毁实例的 2 个“实例”的另一种方法吗? @RémyJUANES,除非您将包含面板的变量重新分配给其他东西,否则此代码没有理由不起作用。此代码已经过测试并按预期工作。 是的,你是对的,我很紧张地说你的代码不起作用,我只是在寻找另一种方法来做到这一点,以了解更多关于 ExJs 的信息。

以上是关于如何使用 ExtJS 销毁对象的所有实例?的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs 4:如何在一个请求中发送所有修改、新和删除的记录?

如何销毁 QPainter 对象/摆脱 drawText() 内存泄漏?

在 Unity 中销毁实例化游戏对象的问题

ExtJS中的全局变量的保存和使用

Extjs 4,如何使用单个 Json 文件为多个动态网格发送多个元数据

如何使用来自更高版本 Sencha ExtJS 的对象?