【问题标题】:How to actually destroy components in ExtJS?如何真正销毁 ExtJS 中的组件?
【发布时间】:2013-12-01 09:15:48
【问题描述】:

在 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: Cannot read property 'name' of undefined”,因为复选框的 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 方法,但是我认为应该是不必要的,所以如果我能够真正销毁组件会更好

【问题讨论】:

  • 你使用什么版本的 ExtJS?在您的代码中,您创建了一个 sub_panel,并且不使用它?我不明白你的代码有什么问题......
  • 你能修复这条线var form_panel.items.first();吗?
  • 您尝试过使用最新版本吗?
  • @AndreiI 对不起,错误应该是子面板
  • @EvenTrimboli:不幸的是,我们只能使用 ExtJS 3.6。升级到 4.x 需要完全重写 UI

标签: javascript extjs destroy formfield


【解决方案1】:

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

formPanel.remove(subPanel, true);

【讨论】:

  • 改代码后为:form_panel.items.first().remove(sub_panel, true);错误仍然发生。调用 validate 时仍然会抛出错误: Uncaught TypeError: Cannot read property 'value' of undefined ext-all-debug.js?1384767897:4269 El.getValue
猜你喜欢
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2019-07-28
  • 1970-01-01
  • 2017-11-20
相关资源
最近更新 更多