如何实际销毁ExtJS中的组件

How to actually destroy components in ExtJS?

本文关键字:组件 ExtJS 何实际      更新时间:2023-09-26

在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:无法读取未定义的属性'name'",因为该复选框的dom元素已被删除。

注意:我已经尝试过:

  • subpanel.destroy()
  • subpanel.remove(true)
  • subpanel.removeAll(true)

我的问题是:

  1. 如何确保getFieldValues不包括已销毁的项目?或
  2. 我如何才能真正完全移除面板(即实际销毁它们)

编辑:

我已经设法通过拥有自己的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);