2013-03-04 30 views
5

プロット内のいくつかの系列の凡例を選択的に非表示にしたいと考えています。そして、このhttp://www.jqplot.com/docs/files/jqplot-core-js.html#Series.showLabelはこのための正しいオプションのように見えます。シリーズごとのjqplot凡例コントロール。シリーズshowLabelがEnhancedLegendRendererと連携していません

しかし、series:{showLabel:false}を使用すると動作していないようです。

この点でオープン(旧)チケット:https://bitbucket.org/cleonello/jqplot/issue/100/feature-request-individual-legend-control

は、私は右のそれを使用していますか?これを達成するための他の回避策もありがとうございます。

更新:ノーマルlegendRendererと正常に動作しますshowLabel

。我々は約線132でこれを参照ファイルjqplot.enhancedLegendRenderer.jsdraw関数で

答えて

1

:コンテキストについて

if (idx < series.length && (series[idx].show || series[idx].showLabel)){ 

、コードのこのビットは、凡例テーブルを作成する機能の一部です。シリーズが表示されるように設定されている場合(デフォルトはtrue)、またはシリーズラベルが表示される場合は、行が作成されます。つまり、一連の凡例アイテムが作成されないようにするには、シリーズ全体を非表示にするとともに、showLabelfalseに設定するのが理想的ではありません。

代わりに||&&に設定してください。これは私のケースでは機能しました。最初に変更されていないバージョンで変更を行ってください。

編集:行うには

まず最初は、私は私のオリジナルの答えで提案されている変更を行うことです。

次に、showLabelfalseの場合、凡例の中のtr要素が作成されないようにする必要があります。これに

tr = $(document.createElement('tr')); 
tr.addClass('jqplot-table-legend'); 
if (reverse){ 
    tr.prependTo(this._elem); 
} 
else{ 
    tr.appendTo(this._elem); 
} 

変更、それを(私たちがここでやっているすべて同じif文でそれをラップしている私たちは前に使用):

上記のif文の直前に、あなたはこのコードが表示されます
if (idx < series.length && (series[idx].show && series[idx].showLabel)){ 
    tr = $(document.createElement('tr')); 
    tr.addClass('jqplot-table-legend'); 
    if (reverse){ 
     tr.prependTo(this._elem); 
    } 
    else{ 
     tr.appendTo(this._elem); 
    } 
} 

下にスクロールして、(ライン212程度)、いくつかのより多くのあなたは、次のコードが表示されます:これはシリーズの一つは、伝説にクリックされたときのイベントハンドラをバインドしている

if (this.showLabels) { 
    console.log(this._elem.find('tr').length - 1); 
    td2.bind('click', {series:s, speed:speed, plot: plot, replot:this.seriesToggleReplot }, handleToggle); 
    td2.addClass('jqplot-seriesToggle'); 
} 

を。私たちが行う必要があることはclickメソッドに渡されたデータをカプセル化するオブジェクトリテラルに追加のプロパティを追加します:

td2.bind('click', {series:s, speed:speed, plot: plot, 
    replot:this.seriesToggleReplot, 
    trIndex: this._elem.find('tr').length - 1 }, handleToggle); 

trIndexは、HTMLテーブルの行の実際のインデックスを表します。これは、伝説が正しい要素を打ち負かすことを保証するものです。

doLegendToggle宣言の中に、あなたはこのようなコードが表示されます。

if (s.canvas._elem.is(':hidden') || !s.show) { 
    // Not sure if there is a better way to check for showSwatches and showLabels === true. 
    // Test for "undefined" since default values for both showSwatches and showLables is true. 
    if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) { 
     plot.legend._elem.find('td').eq(sidx * 2).addClass('jqplot-series-hidden'); 
    } 
    if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) { 
     plot.legend._elem.find('td').eq((sidx * 2) + 1).addClass('jqplot-series-hidden'); 
    } 
} 
else { 
    if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) { 
     plot.legend._elem.find('td').eq(sidx * 2).removeClass('jqplot-series-hidden'); 
    } 
    if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) { 
     plot.legend._elem.find('td').eq((sidx * 2) + 1).removeClass('jqplot-series-hidden'); 
    } 
} 

は、コードではなくtrIndex変数を使用しているように、それらを変更、sidx変数にこれら4つの参照を参照してください。これを行うには、d.trIndexの4つのsidx参照を置き換えます。

+0

私は質問を投稿した直後にまったく同じことを試みました。しかし、問題は、これはseriesToggleオプションではうまくいきません。つまり、凡例が表示されている凡例のラベルをクリックすると、他のラベルが表示されます。だから私は、コードの一部もこれに合わせて変更する必要があると思います。 – Siva

+0

@シヴァー良い点。私の編集を参照してください。それはかなり複雑ですが、それは私のために働いた。 –

+0

私によく見えます!おそらく、[jqplot repo](https://bitbucket.org/cleonello/jqplot)にプルリクエストを送信して、他の人も同様に見えるようにすることができます。 – Siva

2

はあなたjqplotの下に次の行を追加します。私は数が伝説の要素にマッピングされているかを正確にわからないよう

$($("#chartXXX .jqplot-table-legend").get(0)).hide(); 

は、get()は内数で遊んでみてください。このソリューションは、enhancedLegendRendererコードを変更するよりもはるかにエレガントです。

+0

ありがとう!私は自分のコードを次のように変更しました: $( "#chartXXX tr.jqplot-table-legend")first()。hide(); 最初のテーブル行(最初の凡例エントリ)を非表示にする。 – DaFrenk

0

さて私はjbassからとDaFrenk結果から回答を合わせである:

$($("#chartXXX tr.jqplot-table-legend").get(0)).hide(); 

getにおける凡例テーブル内の行を定義するゼロベースのインデックスです。これはまさに私が欲しいものです。

関連する問題