dojo:widget已经注册错误

时间:2015-05-14 15:24:52

标签: dojo widget destroy

我知道这似乎是一个常见的错误,我试图实现一些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。

相关问题