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

时间:2010-02-08 15:15:27

标签: dojo

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

并且为了解决这个问题,我删除了jsId遍历网格,并且我在调用视图时声明了一个全局变量被初始化:

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);

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

谢谢你的帮助

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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();
   }
});