关于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
相关产品推荐
相关产品推荐

