2013年5月20日 星期一

jQuery 外掛 dataTables 的表格欄位排序問題

這幾天在寫架站機時發現, 訪客紀錄竟然沒有照 ajax 傳回的以日期時間倒序排列 (最近到訪者在最上面), 反而是順序排列, 原先以為欄位不該用 datetime, 應該用字串 varchar(255), 試了老半天, 結果無效.
晚上搜尋了一下, 發現問題出在 aaSorting 這個選項上, 我在寫產出程式碼的 get_datatable() 函式時根本不知道要設定這選項, 所以就被默認為用預設值, 它的預設值是 :

"aaSorting": [[0,'asc']]

意思是以第一個欄位 (索引 0) 升序排列, 難怪即使後端 ajax 用 ORDER BY visit_time DESC 傳回倒排的記錄, 到了 dataTables 物件手裡, 又被以升序再排一次. 這也衍生一個問題, 這樣排序兩次不是會讓回應時間拉長嗎? 要怎麼取消預設排序動作呢? 只要設一個空陣列給它即可, 一維就可以了 :

"aaSorting": []

修改了 jqueryui.php 函式庫的 get_datatable() 函式, 加上這個取消排序的設定, 果然就搞定了. 這個問題讓我覺得, 還是要遇到問題後, 經過想方設法去解決, 你才會真正了解一個工具的妙用ㄚ.
其實 aaSorting 選項還可以設定各欄的排序方向, 例如 :

"aaSorting": [[0,'asc'], [2, 'desc']]

表示先以第一欄位升序排列, 再以第三欄位倒敘排列. 但因為我習慣在後端直接以 SQL 指令的 ORDER BY 就先排序好, 所以就沒再打算把 sorting 方向寫進 get_datatable() 函式裡去 : 一律取消預設排序最單純啦.

沒有留言 :