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

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

现在在我的代码中,我告诉ExtJS在我的占位符中渲染一个面板.

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

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

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

在这种情况下,小组之前发生了什么?我是否需要手动销毁它,或者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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)