2011-05-11 3 views
5

j'ai cette erreur dans mon codeerreur: id est déjà enregistré

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

le code de la légende est:

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

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

    stackedAreaLegend.refresh(); 

comment je peux résoudre cette erreur?

Répondre

7

Essayez de détruire un widget avant de créer une nouvelle:

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

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

stackedAreaLegend.refresh(); 
1

Un peu bizarre, mais il semble en regardant l'exemple que cela doit se produire à onLoad plutôt que lorsque le DOM est chargé. Essayez ceci dans la section de la tête de votre code HTML:

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

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

+0

merci. J'ai dojo.addOnLoad (makeObjects); où makeObjects a fait le graphique et l'actualisation. mon problème est que la seule chose qui est vraiment mise à jour est l'info-bulle. Le graphique mis à jour est le dessin ci-dessous du div correct et la légende disparaît –

1

moi aussi eu le même problème, cela m'a aidé

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

0

Vous pouvez également essayer ceci: -

aftter addSeries vous pouvez écrire: -

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

Et pendant la mise à jour qu'après UpdatinSeries() vous pouvez écrire:

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

Pour utiliser les touches numériques, vous devez inclure:

dojo.require("dijit.registry"); 

J'espère que cela aide!

0

Pour se débarrasser de celui-ci, vous devez configurer chargeur dojo l'en-tête de la page avec parseOnLoad: true paramètre:

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