【发布时间】:2013-12-01 09:15:48
【问题描述】:
在 ExtJS FormPanel 中,我使用以下方法动态添加其他面板:
var sub_panel = new SubPanel({various: params});
var form_panel.items.first();
form_panel.insert(3, sub_panel);
当我加载一个特定的子面板并对其调用destroy时,它仍然存在于表单中,因此如果我调用:
form_panel.getForm().getFieldValues();
应该删除的字段仍然返回,即使它们的 isDestroyed 属性设置为 true。
这会导致我的一个复选框抛出错误“TypeError: Cannot read property 'name' of undefined”,因为复选框的 dom 元素已被删除。
注意我已经尝试过:
- subpanel.destroy();
- subpanel.remove(true);
- subpanel.removeAll(true);
我的问题是:
- 如何确保 getFieldValues 不包括已损坏的项目?或
- 我怎样才能真正完全移除面板(即实际销毁它们)
编辑:
我已经通过自己的 formIsValid 方法成功地修复了猴子补丁:
formIsValid: function() {
var valid = true;
this.items.each(function(f){
if (!f.isDestroyed) {
if(!f.validate()){
valid = false;
}
}
});
return valid;
}
isDestroyed 方法,但是我认为应该是不必要的,所以如果我能够真正销毁组件会更好
【问题讨论】:
-
你使用什么版本的 ExtJS?在您的代码中,您创建了一个 sub_panel,并且不使用它?我不明白你的代码有什么问题......
-
你能修复这条线
var form_panel.items.first();吗? -
您尝试过使用最新版本吗?
-
@AndreiI 对不起,错误应该是子面板
-
@EvenTrimboli:不幸的是,我们只能使用 ExtJS 3.6。升级到 4.x 需要完全重写 UI
标签: javascript extjs destroy formfield