javascript - 重新绘制 AmStockChart

标签 javascript jquery charts amcharts

我在页面上有几个 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() 慢得多。

最佳答案

当数据发生变化时,您需要做的就是为数据集设置新的数据:

dataSet.dataProvider = yourDataArray;

然后调用

stockChart.validateData();

但是你的代码也应该改变面板/数据集,所以这对我来说有点奇怪。你有任何控制台错误吗?否则,我需要查看您案例的完整工作来源。但我希望我的建议会奏效。

关于javascript - 重新绘制 AmStockChart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19622236/

相关文章:

javascript - 在路由中使用js函数变量

javascript - 如果变量是全局变量,为什么需要将参数传递给 javascript 中的自执行函数?

c# - c# 中没有网格线的 epplus 图表(它是一个网络应用程序)

javascript - 使用 chart.js 显示连接到标签的计数

java - Android if else 声明关于布局的 Activity 调用

javascript - 在 p5.js 中绘图时转换坐标

javascript - 如何在现有 Span 标记之前或之后添加新的 Span 标记

javascript - 将模板添加到 div 内的 img 前面

javascript - 如何使复选框默认选中?

php - Ajax + morris.js : Cannot call method 'match' of undefined