在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方法是不必要的,因此如果我能够真正销毁该组件,那会更好

最佳答案

那是您应该在窗体面板中调用的remove,其中子面板作为参数:

formPanel.remove(subPanel, true);

09-18 22:04