2013-10-27 25 views
5

我在頁面上幾個AmStockCharts。那些是線圖。數據從JSON格式的MySQL DB中獲取。如果在圖上點(子彈)用戶點擊,然後形式獲取露面,其中用戶可以修改數據並保存。在這種情況下,我需要重新繪製圖表,我無法弄清楚。重繪AmStockChart

下面是一段代碼:

//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); 
    ... 
} 

,然後用它來刪除該分區和包裝箱新的圖表在那個地方但是它比validateData()要慢得多。

回答

5

當數據發生變化時,所有你需要做的是對數據集設置新的數據:

dataSet.dataProvider = yourDataArray; 

,然後調用

stockChart.validateData(); 

但是你的代碼也應該改變面板/集,所以這對我來說有點奇怪。你有任何控制檯錯誤?如果不是,我需要看到你的情況全面工作來源,但我HIPE我的建議會奏效。

+0

好吧,我不能讓整個事情,但我做了一個簡單的代碼有兩個數據源在一個buttion點擊據稱改變,evetually圖形應該重新繪製,但事實並非如此。那就是:http://jsfiddle.net/33SDv/2/ – user164863

+3

您還應該設置chart.mainDataSet =數據集;因爲它記得以前的數據集並使用它。 – zeroin