错误:尝试使用 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 已注册的主要内容,如果未能解决你的问题,请参考以下文章
Gridstack:将小部件从一个网格拖动到另一个网格,嵌套一个