1

在 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);

我的问题是:

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

4

1 回答 1

2

这来自您应该调用的表单面板remove,以子面板作为参数:

formPanel.remove(subPanel, true);
于 2013-11-18T22:22:15.420 回答