2017-07-18 16 views
0

http://api.highcharts.com/highstock/Chart.destroyHighCharts - 寫一個新的圖表之前破壞(防止內存泄漏)

破壞() - 刪除圖表並清除存儲器。在將新圖表寫入同一個容器之前,應調用此方法。它在窗口卸載時被內部調用以防止泄漏。

這是我如何調用銷燬按鈕點擊

http://jsfiddle.net/ihtus/20Ld7hg8/

var hc_options = { 
       chart: { 
       renderTo: 'container' 
      }, 
    series: [{ 
     name: 'USD to EUR', 
     data: usdeur 
    }] 
}; 
var chart=new Highcharts.Chart(hc_options); 

$('#button').click(function() { 
    chart.destroy(); 
    $(this).attr('disabled', true); 
}); 

在我的項目,我(使用更新後的數據)重新繪製圖表多次的setInterval。

這是在使用setInterval代碼http://jsfiddle.net/ihtus/teg540zh/

function init_graph() { 
    var hc_options = { 
      chart: { 
      renderTo: 'container' 
      }, 
      series: [{ 
       name: 'USD to EUR', 
       data: usdeur 
      }] 
    }; 
    var chart=new Highcharts.Chart(hc_options); 
} 

var sint = setInterval(function(){ 
    init_graph(); 
}, 4000); 

我的問題是:我怎麼能破壞圖表before writing a new chart into the same container(因爲它的官方文檔中所建議的)? 由於

+1

所以你想實現類似於這個jsFiddle的東西? http://jsfiddle.net/dpbd0ff9/3/ 我認爲在你的情況下,更好的想法可能是使用chart.update()而不是每當你加載一個新的圖表時破壞圖表:http:// api .highcharts.com/highcharts/Chart.update –

+0

@GrzegorzBlachliński謝謝!我需要摧毀因爲內存泄漏,我有多次更新圖形後。我做了一些更新。實際上,我正在初始化funcion init_graph()中的圖表,並在setInterval中調用init_graph()。這裏是鏈接http://jsfiddle.net/ihtus/teg540zh/在這種情況下銷燬的最好方法是什麼? – ihtus

+0

嗨Ihtus。我不確定你是否需要chart.destroy。正如你在Highcharts代碼中讀到的那樣:「如果容器已經擁有一個圖表,請將其摧毀」 - Highcharts應該在內部銷燬圖表 –

回答

1

從討論中的註釋:

應該可以使用Highcharts.charts陣列和該數組內找到特定圖表(如果存在)用於破壞:

function init_graph() { 
    var hc_options = { 
      chart: { 
      renderTo: 'container' 
      }, 
      series: [{ 
       name: 'USD to EUR', 
       data: usdeur 
      }] 
    }; 
    var chart=new Highcharts.Chart(hc_options); 
} 

var sint = setInterval(function(){ 
Highcharts.charts[0] && Highcharts.charts[0].destroy(); 
    init_graph(); 
}, 4000); 

實施例:http://jsfiddle.net/teg540zh/1/