gpt4 book ai didi

javascript - ExtJS 是否自动垃圾收集组件

转载 作者:搜寻专家 更新时间:2023-11-01 04:17:55 25 4
gpt4 key购买 nike

想象以下情况,我有以下 HTML 文档:

<html>
<head>... include all the js and css here...</head>
<body>
<div class="placeholderForExtPanel"></div>
</body>
</html>

现在在我的代码中的某处,我告诉 ExtJS 在我的占位符中呈现一个面板。

var container = Ext.select('.placeholderForExtPanel');
Ext.create('Ext.form.Panel', {
title: 'My Panel'
});

稍后,代码的其他部分决定从 DOM 中删除占位符 div。

Ext.select('.placeholderForExtPanel').first().remove();

在这种情况下,之前声明的 Panel 会发生什么情况?我是否需要手动销毁它,或者 ExtJS 是否知道它包含的元素刚刚从 DOM 中删除并且应该自行销毁 Panel?我正在使用 ExtJS 4.1。

最佳答案

如果您删除包含元素,ExtJS 不会自动销毁组件。该元素将从 DOM 中删除,但面板保留对它的引用。尝试以下操作:

Ext.select('.placeholderForExtPanel').first().remove();
console.log(Ext.getCmp('panel-id').getEl().dom.parentNode); // assuming your panel's id is "panel-id"

该元素仍然存在,如果您愿意,您可以再次将它附加到 DOM:

document.body.appendChild(Ext.getCmp('panel-id').getEl().dom.parentNode);

(旁注:面板保留对其包含元素的引用这一事实也防止浏览器的垃圾收集器销毁它)

基本上它以相反的方式工作,组件管理其相应的 DOM 元素,因此当您销毁组件时,DOM 元素也将被删除。

此外,任何可以包含其他组件(即 Ext.container.Container 及其所有子类)的组件在被销毁时都会销毁它们的任何子组件(假设 autoDestroy 已启用,这是默认设置)。

因此,如果您想自动销毁已渲染到某个元素的所有组件,只需将该元素创建为容器即可:

var container = Ext.create('Ext.container.Container', {
cls: 'placeholderForExtPanel',
renderTo: Ext.getBody(),
items: [{
xtype: 'panel',
title: 'mypanel'
}]
});

container.destroy(); // destroys the container AND the panel

关于javascript - ExtJS 是否自动垃圾收集组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143082/

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