基本上我有一个窗口,其中包含一个带有项目的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();
}
这一切都很好。并且表单的初始加载完美。 虽然,当我隐藏窗口并再次打开它时,清除/重新加载项目在我的组件上完美运行,但之前的childNodes / items仍然存在于dom.children和dom.innerHTML中。
因此,我的formPanel现在显示两组或更多组没有任何值的控件,以及底部新加载的控件和实际值。
我在清除/添加项目后调用formPanel.doLayout()。
我也尝试在当前formPanel上的每个项目上调用formPanel.remove方法,但我仍然最终显示重复项,并且布局似乎没有正确停靠/锚定,因为我最终得到了每个项目下方的水平滚动条。
我还能做些什么来实际清除/重新加载dom.children和dom.innerHTML?
非常感谢任何帮助。
如果它有任何不同,我正在使用ExtJS 2.1。
答案 0 :(得分:1)
如果每个子容器都有自己的更新程序,那么您应该能够获取面板的更新程序,触发它,并触发所有它的子容器更新程序。这样您就不会重复删除/添加组件,而是“刷新”它们。
出于好奇,你真正想做的是什么?您只是重新加载FormPanel表单字段中保存的数据吗?
答案 1 :(得分:0)
这是否意味着你不想故意破坏formpanel。窗口是否包含表单面板以外的任何内容。
如果窗口只包含formpanel或包含formpanel作为最大部分,那么我认为建议在关闭窗口时销毁窗口,并在每次需要时重新创建窗口。
在这种情况下,您可以将参数传递给创建窗口的函数,以说明您想要哪种类型的控件(只准备/可写)。