You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Ext.ComponentManager nameHolder出现Duplicate name错误的求助

ExtJS 重复名称错误问题分析与修复

问题现象

触发Ext.Error错误,具体错误内容如下:

Uncaught Error: Duplicate name: "name" on ext-formpanel-1
between ext-textfield-1 and ext-textfield-1

问题根源

当**_fixReference方法修复名称持有者(name holder)时,会调用lookupNameHolder()进行查找,但作为字段实际名称持有者的父表单尚未在Ext.ComponentManager的holders**注册表中完成注册。

在此场景下,**markReferencesDirty()**无法正确重置名称持有者的引用(执行holder.refs = holder.nameRefs = null;操作失效),最终导致重复名称错误。

修复方案

通过覆写Ext.Component的lookupNameHolder方法,确保找到的名称持有者被正确注册到Ext.ComponentManager的holders注册表中,代码如下:

Ext.override(Ext.Component, {
  lookupNameHolder: function (skipThis) {
    var cm = Ext.ComponentManager;
    var holder = this.getInheritedConfig("nameHolder", skipThis !== false) || null;
    var id = holder.getId();
    if (!id) return;
    if (!cm.holders[id]) {
      // 已确认该组件为名称持有者,将其加入holders注册表
      cm.holders[id] = holder;
      holder.beginSyncChildDirty();
    }
    return holder;
  },
});

内容的提问来源于stack exchange,提问作者A.Pokidin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:20:29