我在页面上有几个 AmStockCharts。这些是折线图。数据以 JSON 格式从 MySQL 数据库中获取。如果用户单击图形点(项目符号),则会显示一个表单,用户可以在其中修改数据并保存。在这种情况下,我需要重新绘制图表,但我无法弄清楚。
这是一段代码:
//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);
}
});
我把所有图表都画得很好。但是这里有两个问题。第一个问题是我以后无法访问它们,因为“图表”变量仅指最后绘制的图表。第二个问题是,即使我尝试重新绘制最后一张图表,我也没有得到任何结果。
要重绘图表,我尝试了以下方法:
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();
});
那没有做任何事情,即图表没有被重新绘制。
我唯一能做的就是在点击事件时将图表 div 存储在隐藏的输入中:
function chartClick (event) {
var chartdiv = event.event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id
$('#chart_n').val(chartdiv);
...
}
然后使用它从该 div 中删除图表并在该位置创建新的图表,但它比 validateData() 慢得多。