2013-10-27 11 views
5

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().

risposta

5

Quando i dati è cambiato, tutto quello che dovete fare è impostare i nuovi dati per il set di dati:

dataSet.dataProvider = yourDataArray; 

e quindi chiamare

stockChart.validateData(); 

Tuttavia il codice dovrebbe anche cambiare pannello/insieme di dati, in modo da È un po 'strano per me. Hai errori nella console? In caso contrario, avrei bisogno di vedere la piena fonte di lavoro del tuo caso., Ma il mio suggerimento funzionerà.

+0

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

+3

Dovresti anche impostare chart.mainDataSet = dataSet; in quanto ricorda il set di dati precedente e lo utilizza. – zeroin

Problemi correlati