错误:尝试使用 id==grid1 注册小部件,但该 id 已注册

Posted

技术标签:

【中文标题】错误:尝试使用 id==grid1 注册小部件,但该 id 已注册【英文标题】:Error: Tried to register widget with id==grid1but that id is already registered 【发布时间】:2010-02-08 15:15:27 【问题描述】:

我目前正在开发我的个人网站 在我的网站的一部分,我有一个有偏见的观点 pr 避免重复代码... 而这个视图我有一个 dojox.grid.datagrid ... 我可以在同一页面中调用此视图两次 (ruban.phtml) 问题是我点击了这个视图(部分视图)的吸引力的 1 个按钮,然后我点击了这个视图的吸引力的第二个按钮我有一个错误:错误:尝试注册id == grid 但该 id 已注册的小部件

为了解决这个问题,我删除了 jsId walk the grid,并在调用视图时声明了一个全局变量:

grid = dijit.getEnclosingWidget(dojo.byId("gridId1"); // soit grid = dijit.getEnclosingWidget(dojo.byId("gridId2");

我试过了,但我总是遇到同样的问题:

...... onDownloadEnd:function()

          // Update the id of the grid
            var nodeGrid = dojo.byId("ancienIdGrid");
            nodeGrid.setAttribute("id", "newIdGrid");         
            varGlobalPourId = dijit.getEnclosingWidget(nodeGrid);

....

谢谢你帮助我

【问题讨论】:

【参考方案1】:

Dijit 为 dijit.registry 中的小部件维护 id 字符串的哈希(参见 dijit/_base/manager.js) 更新 DOM 中的 id 不会影响该表,所以我可以看到如果你尝试它会失败两次创建具有相同 ID 的小部件。如果您需要一个 id,那么为每个网格生成一个唯一的 id 怎么样?

【讨论】:

【参考方案2】:
destroy all registered id forcefully with this snippet than you go on your way!!

var ids = ["cp1","cp2","cp3"];
dijit.registry.forEach(function(w) 
   if(dojo.indexOf(ids,id))
        w.destroyRecursive();
   
);

【讨论】:

以上是关于错误:尝试使用 id==grid1 注册小部件,但该 id 已注册的主要内容,如果未能解决你的问题,请参考以下文章

dojo: 小部件已注册错误

Gridstack:将小部件从一个网格拖动到另一个网格,嵌套一个

Gridstack:将小部件从一个网格拖到另一个网格中,嵌套一个

如何为小部件 Flutter 添加垂直间距

DOJO 错误 ID 已注册

Flutter:我正在尝试使用扩展类包装 Text 小部件,但出现“未定义命名参数‘child’”错误