2009-12-29 5 views
1

J'utilise le dojox.charting.widget.Chart2D et j'essaie de récupérer les données d'un dojo.data.ItemFileReadStore. Je peux récupérer les données, et tout fonctionne et affiche, sauf que je n'arrive pas à trouver un moyen d'afficher des étiquettes personnalisées sur les éléments. Mon code HTML est:Afficher l'étiquette personnalisée du magasin de données avec dojox.charting

<div dojoType="dojo.data.ItemFileReadStore" jsId="chartDataStore" 
    url="json/archiveinfo.json.php"></div> 
<div dojoType="dojox.charting.widget.Chart2D" id="chartTest" 
    theme="dojox.charting.themes.PlotKit.blue" style="width: 300px; height: 300px;"> 
    <div class="plot" name="default" type="Pie" fontColor="black" htmlLabels="false" 
    radius="100"></div> 
    <div class="series" name="Series A" store="chartDataStore" field="y" 
    label="text" valueFn="Number(x)"></div> 
    <div class="action" type="Tooltip"></div> 
    <div class="action" type="MoveSlice"></div> 
</div> 

Et mon JSON du ItemFileReadStore est:

{"identifier":"id","labelAttribute":"text","items": 
    [ 
    {"id":1,"y":55,"text":"Free"}, 
    {"id":2,"y":45,"text":"Used"} 
    ] 
} 

J'ai essayé de placer l'attribut label de la série et ont mis l'labelAttribute dans le JSON. J'ai également essayé juste label dans le JSON et cela n'a pas fonctionné non plus. Lorsque je fournis les données sous forme de JSON dans un array ou que je fournis le data directement dans la série, les étiquettes fonctionnent. Je voulais vraiment le rendre plus flexible en fournissant les données via un DataStore.

Répondre

1

La manière de le faire est de modifier un peu votre JSON et mettre à jour les attributs correspondants dans le code HTML.

JSON:

{ 
    "items": [ 
    {"id":1, "slice": {"y":55,"text":"Free"}}, 
    {"id":2, "slice": {"y":45,"text":"Used"}} 
    ] 
} 

Le seul changement significatif est de séparer les données spécifiques à tarte dans un sous-objet (slice) pour plus de simplicité.

HTML (seule la ligne liée au magasin devrait être modifié):

<div class="series" name="Series A" 
    store="chartDataStore" field="slice"></div> 

Laissez-moi savoir comment ça se passe.

+0

Cela ne semble pas fonctionner. Je génère le JSON selon votre suggestion et j'ai défini '' field = "slice" 'mais le graphique ne rend pas et je ne reçois aucune erreur dans Firebug. J'ai essayé de changer le 'label =" slice.text "' et le 'valueFn =" Number (x.y) "' pensant peut-être que j'avais besoin d'y accéder en tant qu'objets, mais toujours pas de chance. Je suis retourné juste pour m'assurer que je n'ai pas fait d'erreur et que je commence à travailler comme avant. – Kitson

+0

Pas besoin de jouer avec 'label' ou' valueFn', ou quoi que ce soit d'autre. Il semble que j'ai oublié d'enlever 'identifier'. Vous pouvez également supprimer 'id' pour garder vos données plus propres. J'ai effectivement recréé votre exemple, et cela fonctionne pour moi maintenant. –

+0

Woo Hoo! Il fonctionne comme un charme. Merci! – Kitson

-1

je devais faire face avec des problèmes similaires des étiquettes personnalisées, bien que j'utilisais une façon programmatique pour créer le graphique sur div .... Espérons que cela aide quelqu'un ....

var mytooltip = new dojox.charting.action2d.Tooltip(mychart,"default", 
    {text: function(e) { 
       var tooltiptext = <construct ur custom label here> 
       return tooltiptext; 
     } 
    }); 

mychart est la variable que j'ai utilisé pour créer le widget graphique ...