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

时间:2013-11-18 09:21:27

标签: javascript extjs destroy formfield

在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(真);
  • subpanel.removeAll(真);

我的问题是:

  1. 如何确保getFieldValues不包含已销毁的项目? OR
  2. 如何实际完全移除面板(即实际销毁它们)
  3. 编辑:

    我已经设法通过拥有自己的formIsValid方法来修复monkeypatch:

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

    isDestroyed方法然而我认为应该是不必要的,所以如果我能够真正销毁组件会更好

1 个答案:

答案 0 :(得分:2)

这是来自表单面板,你应该调用remove,子面板作为参数:

formPanel.remove(subPanel, true);