dojo解决这个问题Tried to register widget with id=="myid" but that id is already registered

在dojo中,除了沿用Dom结点, dojo 还自定义了一类结点用“dojoType" 进行标识。

dojo 称这些结点为widget。 当检测到HTMl文档中某个标签定义了dojoType 属性之后,dojo会调用dojo包中相应的 js 及 css 文件对这个结点进行渲染。 从而这个结点元素就会相应地显示出具有dojo特色的样式及功能。

如此说来, dom.byId 跟 dojo.byId 获取到的就是普通的HTMl文档结构树中的某个结点元素,以下简称dom结点,。

而 registry.byId 获取到的是一个dojo的widget,以下简称widget结点。

它们的区别之一是 innerHTML, tagName 等方法只对用 dom结点生效。

 

这样在程序中有时候注册ID的时候,我们注册的widget,在第二次重复使用的时候,会出现如下错误:

Tried to register widget with id=="myid" but that id is already registered

 

遇到这个问题,主要提供如下三种解决办法:

1.刷新页面,从头再来。(这个可以解决)

2.新打开一个页面。(没试过)

3.既然提示id is already registered,已经被注册了,那我们就先把注册的destory,然后再创建一个相同ID的容器,这种解决办法最常用。

 

使用:

registry.byId("myTableNode").destroy();
$("#bot").append("<div id='myTableNode'></div>");  //bot是上一个节点id,append意思是添加在之后,当然按你的需求来,before,after都可以,这是jquery的东西。

这段代码添加在调用代码之前,解决问题。

写的安全一点,应该这样:
if(registry.byId("myTableNode")){
registry.byId("myTableNode").destroy();
$("#bot").append("<div id='myTableNode'></div>");  //bot是上一个节点id,append意思是添加在之后,当然按你的需求来,before,after都可以,这是jquery的东西。
}
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Soyoger

听说打赏的都进了福布斯排行榜。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值