在 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:无法读取未定义的属性'名称'”,因为复选框的 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 方法应该是不必要的,所以如果我能够真正销毁组件会更好