Exiba a etiqueta personalizada do Data Store com Dojox.Charting
-
21-09-2019 - |
Pergunta
Estou usando o dojox.charting.widget.Chart2D
e estou tentando recuperar os dados de um dojo.data.ItemFileReadStore
. Posso recuperar os dados e tudo funciona e exibe, exceto que não consigo encontrar uma maneira de exibir rótulos personalizados nos itens. Meu snippet html é:
<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>
E meu json do itemFileReadStore é:
{"identifier":"id","labelAttribute":"text","items":
[
{"id":1,"y":55,"text":"Free"},
{"id":2,"y":45,"text":"Used"}
]
}
Eu tentei definir o atributo da etiqueta na série e defini o labelAttribute
no JSON. Eu também tentei apenas label
no JSON e também não funcionou. Quando eu forneço os dados como um JSON em um array
ou forneça o data
Diretamente na série, eu tenho os rótulos para funcionar. Eu realmente queria torná -lo mais flexível, fornecendo os dados por meio de um armazenamento de dados.
Solução
A maneira de fazer isso é modificar um pouco o seu JSON e atualizar atributos correspondentes no HTML.
JSON:
{
"items": [
{"id":1, "slice": {"y":55,"text":"Free"}},
{"id":2, "slice": {"y":45,"text":"Used"}}
]
}
A única mudança significativa é separar dados específicos da torta em um subobjeto (slice
) Pela simplicidade.
HTML (apenas a linha relacionada à loja deve ser modificada):
<div class="series" name="Series A"
store="chartDataStore" field="slice"></div>
Deixe -me saber como foi.
Outras dicas
Eu tive que enfrentar problemas semelhantes com rótulos personalizados, embora estivesse usando uma maneira programática de criar o gráfico no div .... Espero que isso ajude alguém ....
var mytooltip = new dojox.charting.action2d.Tooltip(mychart,"default",
{text: function(e) {
var tooltiptext = <construct ur custom label here>
return tooltiptext;
}
});
mychart
é a variável que eu usei para criar o widget de gráfico ....