Neuzeichnen AmStockChart
Ich habe mehrere AmStockCharts auf der Seite. Das sind line-Graphen. Die Daten wird der Wert aus MySQL-DB im JSON-format. Wenn der Benutzer klickt auf einen graph dot (eine Kugel) und dann ein Formular bekommt gezeigt, wo Benutzer kann die Daten ändern und speichern. In diesem Fall würde ich brauchen, um neu zeichnen das Diagramm aus und ich kann nicht dieses heraus.
Hier ist das Stück code:
//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);
}
});
Bekomme ich alle charts fein gezeichnet. Aber hier sind zwei Probleme dann. Erste problem, dass ich keinen Zugriff später als der 'chart' variable bezieht sich nur auf den letzten chart gezeichnet. Das zweite problem ist, dass selbst wenn ich versuche neu zu zeichnen, dieses Letzte Diagramm bekomme ich kein Ergebnis.
Neu zeichnen das Diagramm habe ich versucht die folgenden:
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();
});
Das hat nichts tun, d.h. der chart nicht neu gezeichnet.
Das einzige, was ich tun konnte, ist zum speichern der chart-div in ein hidden-input im click-Ereignis von:
function chartClick (event) {
var chartdiv = event.event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id
$('#chart_n').val(chartdiv);
...
}
und dann verwenden, um entfernen Sie das Diagramm aus, das div und die Kiste neu ein auf Platz, aber es ist viel langsamer, dann wird die validateData() wäre.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Daten geändert werden, ist alles was Sie tun müssen, ist legen Sie neue Daten gesetzt:
dann rufen Sie
Jedoch sollte Ihr code auch ändern-panel/dataset, also Es ist ein bisschen seltsam für mich. Bekommt man keine Konsole Fehler? Falls nicht, würde ich brauchen, um zu sehen, die volle Arbeits-Quelle der Fall ist., aber ich hipe mein Vorschlag funktionieren wird.