错误:id已经注册

时间:2011-05-11 13:46:01

标签: javascript dojo dojox.charting

我的代码中出现此错误

Error: Tried to register widget with id==legend1 but that id is already registered

图例的代码是:

    <div id="legend1"></div>

    var stackedAreaLegend = new dojox.charting.widget.SelectableLegend({
    chart: chart1
    }, "legend1");   

   stackedAreaLegend.refresh(); 

我怎么能解决这个错误?

5 个答案:

答案 0 :(得分:8)

尝试在创建新内容之前销毁小部件:

var stackedAreaLegend = dijit.byId('legend1');
if (stackedAreaLegend) {
   stackedAreaLegend.destroyRecursive(true);
}

stackedAreaLegend = new dojox.charting.widget.SelectableLegend({
    chart: chart1
    }, "legend1");   

stackedAreaLegend.refresh(); 

答案 1 :(得分:1)

有点奇怪但是看起来它看起来需要在onLoad上发生,而不是在DOM完全加载时。请在HTML的主题部分中尝试此操作:

dojo.addOnLoad(function(){
  var stackedAreaLegend = dojox.charting.widget.SelectableLegend({chart: chart},"legend1");
  stackedAreaLegend.refresh();
});

来源:http://bugs.dojotoolkit.org/browser/dojox/trunk/charting/tests/test_selectableLegend.html?rev=23507

答案 2 :(得分:1)

我也有同样的问题,这对我有帮助

var gridRegister = registry.byId('grid'); if (gridRegister) { gridRegister.destroyRecursive(true); }

答案 3 :(得分:0)

你也可以试试这个: -

Aftter addSeries你可以写: -

var legend = new dojox.charting.widget.Legend({ chart: chart, horizontal: false }, chartID);

UpdatinSeries()之后更新,你可以写:

dijit.byId(chartID + "_Legend").refresh();

使用数字时,您必须包括:

dojo.require("dijit.registry");

希望它有所帮助!

答案 4 :(得分:0)

要摆脱它,你应该使用parseOnLoad:true参数在页面标题中配置dojo loader:

<script src="//yandex.st/dojo/1.9.1/dojo/dojo.js" data-dojo-config="isDebug: false, async: true, parseOnLoad: true"></script>