Ho diversi AmStockCharts sulla pagina. Quelli sono grafici a linee. I dati vengono prelevati dal DB MySQL in formato JSON. Se l'utente fa clic su un punto grafico (un punto elenco), viene visualizzato un modulo in cui l'utente può modificare i dati e salvarlo. In questo caso, avrei bisogno di ridisegnare il grafico e non riesco a capirlo.Ridisegna AmStockChart
Ecco il pezzo di codice:
//drawing all charts there are
var chart;
$.getJSON('stats.php', function (data) { // get all data from all stats at once
var i=0;
for (chartData in data) {
i++;
chart = new AmCharts.AmStockChart();
var dataSet = new AmChart.DataSet();
dataSet.dataProvider = chartData;
// etc. etc. here are all the single graph parameters
$('#stats').append('<div id="chartdiv' + i + '"></div>');
chart.write("chartdiv" + i);
}
});
ricevo tutti i grafici disegnati bene. Ma qui ci sono due problemi. Primo problema che non posso accedervi in seguito poiché la variabile 'grafico' si riferisce solo all'ultimo grafico disegnato. Il secondo problema è che anche se provo a ridisegnare questo ultimo grafico, non ottengo alcun risultato.
per ridisegnare lo schema che ho provato quanto segue:
function chart_redraw(stat) {
$.getJSON('stat.php?redraw=' + stat, function (data) { // get data for one particular stat
var dataSet = new AmCharts.DataSet();
dataSet.dataProvider = data;
...
chart.dataSets = [dataSet];
var stockPanel = new AmChart.StockPanel();
stockPanel.validateData();
chart.panels = [stockPanel];
chart.validateNow();
});
che non ha fatto nulla, vale a dire il grafico non ottenere ri-disegnato.
L'unica cosa che potevo fare è quello di memorizzare il div grafico in un input nascosto in evento click da:
function chartClick (event) {
var chartdiv = event.event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id
$('#chart_n').val(chartdiv);
...
}
e poi utilizzarlo per rimuovere la tabella da quel div e cassa di nuovo in quel posto ma è molto più lento di quanto sarebbe validateData().
Ok, non sono riuscito a creare il tutto ma ho creato un codice semplice con due origini dati che presumibilmente cambiano a un clic, in ogni caso il grafico dovrebbe ridisegnare ma non lo è. Eccolo: http://jsfiddle.net/33SDv/2/ – user164863
Dovresti anche impostare chart.mainDataSet = dataSet; in quanto ricorda il set di dati precedente e lo utilizza. – zeroin