dojo - dojo:widget已经注册错误
我知道这似乎是一个常见的错误,我试图实现一些jquery或Dojo代码来解决问题但到目前为止没有任何帮助 - 我一直得到同样的错误:Widget已经注册了ID ... < / p>
这是我的代码:
$( "div" ).remove( "#div_temperature_legend" ); //jquery
dojo.create("div", { id: "div_temperature_legend", innerHTML: "<p></p>" }, "legendPanel");
var legend = new esri.dijit.Legend({
map: map,
layerInfos: [{ layer: layer, title: "Temperature" }],
}, "div_temperature_legend");
legend.startup();
上面的代码是按钮单击功能,该函数本身是一个大的dojo require()
函数的一部分;并且第一次工作。 jQuery行似乎确实删除了,因为传说不会在新创建的div_temperature_legend
图层中重复。
无论如何,我尝试了dojo的destroy()
功能,但我仍然遇到同样的错误。我想某种程度上,某个地方我需要register
这个div然后摧毁它。但是怎么样?哪里?在我的代码中?
理想情况下,代码应检测小部件是否存在,并且不会创建另一个图例。
感谢。
最佳答案:
2 个答案:
答案 0 :(得分:1)
错误在于dojo小部件的错误处理。创建后,它将通过其ID在注册表哈希中设置。你可以 a)配置小部件dojo方式 要么 b)每次为小部件创建唯一ID。
如果您有多个相同类型的小部件,使用ID不是一个好主意。最好跳过ID并使用class属性。 ID将自动分配,但您对此不感兴趣,因为选择器可以使用您指定的类名。
答案 1 :(得分:-1)
以下是我根据@Sasha对独特Div ID的想法实现我的解决方案的方法:
$("#" div_legend_global).remove();
div_legend_global = "div_" new Date().getTime().toString();//div_legend_global defined globally
dojo.create("div", { id: div_legend_global, innerHTML: "<p></p>" }, "legendPanel");
var legend = new esri.dijit.Legend({
map: map,
layerInfos: [{ layer: layer, title: "Temperature" }],
}, div_legend_global);
legend.startup();
所以我定义了一个名为div_legend_global
的全局变量,然后在按钮单击功能中为其分配唯一值。然后,该唯一值将成为创建Legend()函数的ID。在后续调用之后,jquery将删除唯一的div,从而防止显示多个图例实例。
现在,Dojo可能会在div中保留div,我认为从堆栈中删除会更好。但我现在没事。
谢谢@Sasha。
0条评论