web-dev-qa-db-ja.com

Highcharts / jQuery-元のオプションでチャートを破棄して再構築します

このスレッドの情報に基づく: 独自の状態を実装する-INACTIVE_STATE?

自分のニーズに合ったチャートを作成しました- jsfiddle

ユーザーがすべてのシリーズを表示/非表示にしたり、すべてのシリーズをチェック/チェック解除したりできるように、いくつかのカスタムコントロールを追加しました。

これらはすべて正常に機能します。

私がしたい最後の部分は、ユーザーが元のオプションでチャートをリセットできるようにすることです。

この部分も機能しましたが、問題があります。チャートが再構築されると、実行する変数を破棄して再指定したため、ユーザーが表示/非表示/チェック/チェック解除できる機能が機能しなくなります。の。

だから私の質問-

  1. これはチャートを破棄して再構築する正しい方法ですか、それともより良い方法がありますか?
  2. これがその方法である場合、表示/非表示/チェック/チェック解除機能を後で引き続き機能させるにはどうすればよいですか?

チャートをリセットするコードは次のとおりです。

//reset the chart to original specs
$('#resetChart').click(function(){
    chart1.destroy();
    chart1 = new Highcharts.Chart(optionsChart1,highlightSer);
});

highlightSerは、特定のシリーズを強調表示するためのコールバック関数です。

後で機能しなくなるコードの例:

var chart = chart1;
$('#showAll').click(function(){
        for(i=0; i < chart.series.length; i++) {
        chart.series[i].show();
    }
});

ありがとう!

10
jlbriggs

1)これはチャートを破棄して再構築する正しい方法ですか、それともより良い方法がありますか?

これが唯一の方法であり、Highchartsは十分に賢いので、メモリリークについて心配する必要はありません。

2)これがその方法である場合、表示/非表示/チェック/チェック解除機能を後で引き続き機能させるにはどうすればよいですか?

グラフを再作成していますが、変数chartに再度割り当てていません。

$('#resetChart').click(function(){
    chart1.destroy();
    chart1 = new Highcharts.Chart(optionsChart1,highlightSer);
    chart = chart1; // <-------- Add this line here.
});
17
Bhesh Gurung

ここでチャートを新しい変数に割り当てる理由はありますか?

var chart = chart1;

chartは、グラフを破棄した後、グラフを指しなくなります。再割り当てしたchart1を使用するだけで、すべて は正常に機能するようです 。それとも私は何かが足りないのですか?

2
polarblau