Javascript 如何实际销毁ExtJS中的组件?

Javascript 如何实际销毁ExtJS中的组件?,javascript,extjs,destroy,formfield,Javascript,Extjs,Destroy,Formfield,在ExtJS FormPanel中,我使用以下方法动态添加其他面板: var sub_panel=新的子面板({variable:params}); var form_panel.items.first(); 表格面板。插入(3,子面板); 当我加载特定子面板并调用destroy时,它仍然存在于表单中,因此如果我调用: form_panel.getForm().getFieldValues(); 即使已将isDestroyed属性设置为true,本应删除的字段仍将返回 这会导致我的一个复选框

在ExtJS FormPanel中,我使用以下方法动态添加其他面板:

var sub_panel=新的子面板({variable:params});
var form_panel.items.first();
表格面板。插入(3,子面板);
当我加载特定子面板并调用destroy时,它仍然存在于表单中,因此如果我调用:

form_panel.getForm().getFieldValues();
即使已将isDestroyed属性设置为true,本应删除的字段仍将返回

这会导致我的一个复选框抛出错误“TypeError:无法读取未定义的属性“name”,因为复选框的dom元素已被删除

注:我尝试过:

  • 子面板销毁()
  • 子面板移除(真)
  • 子面板removeAll(真)
我的问题是:

  • 如何确保GetFieldValue不包含已销毁的项目?或
  • 我如何才能完全移除面板(即实际销毁它们)
  • 编辑:

    我通过使用自己的formIsValid方法成功地修复了monkeypatch:

        formIsValid: function() {
            var valid = true;
            this.items.each(function(f){
                if (!f.isDestroyed) {
                    if(!f.validate()){
                        valid = false;
                    }
                }
            });
    
            return valid;
        }
    

    但是,我认为isDestroyed方法应该是不必要的,因此如果我能够实际销毁来自表单面板的组件,您应该调用
    remove
    ,并将子面板作为参数,那会更好:

    formPanel.remove(subPanel, true);
    

    您使用什么版本的ExtJS?在代码中,您创建了一个子面板,但不使用它?我不明白你的代码有什么问题……你能修复这行
    var form_panel.items.first()吗?你试过使用最新版本吗?@AndreiI抱歉,这是一个错误subpanel@EvenTrimboli:不幸的是,我们被限制使用ExtJS 3.6。升级到4.x需要在将代码更改为:form_panel.items.first().remove(sub_panel,true)后完全重写UIC;错误仍然存在。调用validate时,它仍然抛出错误:uncaughttypeerror:无法读取未定义的ext all debug.js的属性“value”?1384767897:4269 El.getValue