2017-01-26 9 views
1

私は、複数の行を持つチャートを持っています。それぞれの行は、それ自身のy軸にプロットされています。行が隠されているかどうかを伝える

私はそれを設定しようとしています。そのため、凡例を介して行が隠されているときに、その上にある軸も非表示になります。私の計画はキャンバスにクリックリスナーを追加し、そこからラインの状態に応じてすべての軸を無効または有効にすることです。

私の問題は、行が隠されているかどうかを判断することです。 dataset.hiddenプロパティは、dataset._metaの隠し値が定義されていない場合にのみ関連するように見えます。私はこれを念頭においてコードを設定しようとした:このコードは、私のオリジナルのテストのために働い

ctx.onclick = function(){ 
    var changed = false; 
    for(var j = 0;j < scatterChart.options.scales.yAxes.length;j++){ 
     var oldVal = scatterChart.options.scales.yAxes[j].display; 
     var hidden = false; 
     var isHiddenDataSet = scatterChart.data.datasets[j].hidden; 

     if(isHiddenDataSet){ 
      hidden = true; 
     } 

     var isHiddenMeta = scatterChart.data.datasets[j]._meta[0].hidden; 
     if(isHiddenMeta != null){ 
      hidden = isHiddenMeta; 
     } 

     scatterChart.options.scales.yAxes[j].display = !hidden; 
     changed = changed || oldVal == scatterChart.options.scales.yAxes[j].display; 
    } 
    if(changed){ 
     scatterChart.update(); 
    } 
} 

一つだけのチャートを持っているが、データオブジェクトのインデックスのようにページに複数のチャートがある場合には失敗しました_metaはグラフからグラフに変更されます。

データセットが非表示になっているかどうかを判断する方法はありますか?それはあなたのために働くので

+1

複数のグラフを扱う場合、 '_meta'が動作しません。 '_meta [0]'を '_meta [Object.keys(scatterChart.data.datasets [j] ._ meta)[0]]'に置き換えてみてください。 – tektiv

+0

@tektivそれは仕事を終わらせる。私はそのような反射的な答えがあると思ったが、それをどうやって行うのかは分からなかった。 – Fr33dan

答えて

1

、私は特に、このようなhiddenなどの特定のプロパティを検索するときに、あなたのデータセットで

_metaプロパティは非常に便利です答えとして、それを設定しています。
しかし、同じページに複数の図がある場合、それを処理することは非常に困難です。

次の操作を行う:

var isHiddenMeta = scatterChart.data.datasets[j]._meta[0].hidden; 

0インデックスは実際にあなたのコード内で呼び出される最初のグラフである(など、インデックス1が第二..です
ですから、情報を取得します最初のチャートの、あなたがちょうどクリックしたものではありません。この問題を解決するには


次のように、あなたは、あなたのデータセットの情報と結合されたObject.keys()メソッドを使用する必要があります。

var isHiddenMeta = scatterChart.data.datasets[j]._meta[Object.keys(scatterChart.data.datasets[j]._meta)[0]].hidden; 

これはあなたの本当のチャートのデータセットのhiddenプロパティを取得します。

関連する問題