重绘AmStockChart

use*_*863 5 javascript jquery charts amcharts

我在页面上有几个AmStockCharts.这些是线图.数据以JSON格式从MySQL DB获取.如果用户点击图形点(子弹),则会显示一个表单,用户可以在其中修改数据并保存.在这种情况下,我需要重绘图表,我无法弄清楚这一点.

这是一段代码:

//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);
    }
});
Run Code Online (Sandbox Code Playgroud)

我把所有的图表画好了.但是这里有两个问题.我之前无法访问它们的第一个问题是"图表"变量仅指最后绘制的图表.第二个问题是,即使我尝试重绘最后一张图表,也没有结果.

要重绘图表,我尝试了以下内容:

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();
});
Run Code Online (Sandbox Code Playgroud)

这没有做任何事情,即图表没有重新绘制.

我唯一能做的就是将图表div存储在click事件的隐藏输入中:

function chartClick (event) {
    var chartdiv = event.event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id
    $('#chart_n').val(chartdiv);
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后使用它从该div中删除图表并在该位置创建新的图表,但它比validateData()慢得多.

zer*_*oin 5

更改数据后,您只需为数据集设置新数据:

dataSet.dataProvider = yourDataArray;
Run Code Online (Sandbox Code Playgroud)

然后打电话

stockChart.validateData();
Run Code Online (Sandbox Code Playgroud)

但是你的代码也应该改变面板/数据集,所以这对我来说有点奇怪.你有任何控制台错误吗?如果没有,我需要看到你的案件的完整工作来源.但我强调我的建议将有效.

  • 你还应该设置chart.mainDataSet = dataSet; 因为它记得以前的数据集并使用它. (3认同)