基本上,我有一个包含带有项目的formPanel的窗口,该窗口在多个地方共享。这意味着formPanel的项目可能会略有不同。 (控件的类型)。

我设法为窗口上的适当情况动态清除并添加自定义按钮。

但是我在formPanel的项目上遇到了一个小问题。

深入研究源代码,我发现在Ext.Container initComponent方法中有以下这段代码:

var items = this.items;
if(items){
    delete this.items;
    if(Ext.isArray(items)){
        this.add.apply(this, items);
    }else{
        this.add(items);
    }
}

这似乎与我要实现的目标相似。
删除所有当前项,然后调用formPanel.add方法将再次调用以下代码:
if(!this.items){
    this.initItems();
}

到这里为止一切都很好。表格的初始加载效果很好。
虽然,当我隐藏窗口并再次打开它时,项目的清除/重新加载在我的组件上运行良好,但是以前的childNode / items仍然存在于dom.children和dom.innerHTML中。

因此,我的formPanel现在显示两组或更多组没有任何值的控件,而新加载的控件在底部显示实际值。

在清除/添加项目后,我确实调用了formPanel.doLayout()。

我也尝试过在当前位于formPanel上的每个项目上调用formPanel.remove方法,但最终仍然会显示重复的内容,并且布局似乎无法正确停靠/固定,因为最终会出现水平滚动条在每个项目下面。

我还可以做些什么才能真正清除/重新加载dom.children和dom.innerHTML?

任何帮助将不胜感激。

如果有任何区别,我正在使用ExtJS 2.1。

最佳答案

如果每个子容器都有它自己的更新器,那么您应该能够获取面板的更新器,将其触发,并使其触发所有子容器的更新器。这样,您就不会重复删除/添加组件,而是“刷新”它们。

出于好奇,您真正想做的是什么?您是否只是重新加载FormPanel表单字段中保存的数据?

10-07 17:19