列名でソート出来るように作るにはどうすれば良いか?
パッと考え付くのは、Actionを追加しlink_to_remoteを使って
行なうというくらい。(私の技量の問題はおいておいて。)
ということで、以下の流れをユーザーに提供する手段を探していました。
1、普通のFormを使って、条件を設定し合致するテーブルを生成
2、検索結果をソートする
なお、2のソートの時に通信が発生しない方が私の会社の環境を
考えると良い様に感じました。(海外拠点の回線がかなり細い為。)
そこで見つけたのが「tablesort.js」です。
<使い方>
form_remote_tagを使って、Formを構成する。
検索結果を表示するテーブルをXHTMLで書くこと。
(Rails自体は元々XHTMLを使うことが前提なのですが)
<table>
<thead>
<tr>
<th>No</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody id="list">
</tbody>
</table>
このように、最初tbodyは空にしておいて、form_remote_tagで
listをupdateするようにする。
つまり、ユーザのForm入力がAJAXの動きでサーバに届き、
サーバのActionで<tr><td>---</td></tr>を送り返せば
tbodyの中に結果が入ってきて表示されるようになる。
(AJAXが使えるようになるまでは、FormとTableを別フレームに切り
検索が実行されてもFormが消えないようにしていたが、
この方法なら部分的に書き換えられるだけなのですっきりする。)
さて、これでAJAXを利用して結果を表示するテーブルを
作れるのだが、「tablesort.js」をどう使うか。
作った最初は、Tableタグの外側でdivを切っておいて「tablesort.js」の
読み込みタグを含む形で送信するRHTMLを書いたが
ソートのリンクが機能しなかった。
結果、一番最初にユーザーに送る段階で列名(th)を定義し、
tbodyの中を差し替えるようにしたところ、ちゃんと動作した。
ということで、「tablesort.js」を使う上でのコツとしては
1、XHTMLのtableを使い、theadに列名を入れておいて事前に
ユーザーに送信しておくこと。
2、formはAJAXを利用して、tbodyに結果を送るようにすること。
になります。
なお、具体的な「tablesort.js」の設定方法はリンクを参考にして下さい。
tablesort.js : リンク
0 件のコメント:
コメントを投稿