jQuery UI Tabs と jqPlot の両立は可能

  • 投稿日:
  • by
  • カテゴリ:
  • ハッシュタグ:

結局、原因は自分がヘボいだけでした。 orz

jqPlot with jQuery UI」のページでは、2番目以降のタブ内に描かれたグラフを replot するために、以下のようなコードが提示されていました。

$('#tabs').bind('tabsshow', function(event, ui) {
if (ui.index == 1 && plot1._drawCount == 0) {
plot1.replot();
}
else if (ui.index == 2 && plot2._drawCount == 0) {
plot2.replot();
}
});

自分の場合はタブが4つあるので、こんな風に変更しました。

$('#tabs').bind('tabsshow', function(event, ui) {
if (ui.index == 1 && plot1._drawCount == 0) {
plot1.replot();
} else if (ui.index == 2 && plot2._drawCount == 0) {
plot2.replot();
} else if (ui.index == 3 && plot3._drawCount == 0) {
plot3.replot();
} else if (ui.index == 4 && plot4._drawCount == 0) {
plot4.replot();
}
})

ところがこれだと4番目のタブ内のグラフが表示されないのです。

タブを指定してページを開く方法を調べていたら、マニュアルに「ui.index // 選択された(クリックされた)タブの0から始まるインデックス」と書いてあります。
そこで、下記のように変更したら4つのタブ内の全てのグラフが表示できました。

$('#tabs').bind('tabsshow', function(event, ui) {
if (ui.index == 1 && plot2._drawCount == 0) {
plot2.replot();
} else if (ui.index == 2 && plot3._drawCount == 0) {
plot3.replot();
} else if (ui.index == 3 && plot4._drawCount == 0) {
plot4.replot();
}
});

「jqPlot with jQuery UI」の例では、1番目のタブ内にはグラフはなく、2番目と3番目にグラフがあるので、タブとグラフの番号のズレに気がつかなかったんですね。

さらに、jQuery 関係のファイルの読み込みを整理したおかげで、jqPlotの表示も安定しました。 これなら実用に耐えます。

ちなみに jqPlot で軸の目盛り間隔を指定するには、 tickInterval を指定すればいいようです。