之前無意間看到有人推薦了 jquery-datatables-rails
這個GEM
是用來快速把一個列表的資料依照欄位排序,或是增加分頁的功能,使用了Jquery的作法
少量的資料可以在 client端排,大量的資料的話應該會造成使用者執行的效能問題
進階作法會是在server side 排序之後才吐回去給前端顯示出來。
說明文件在這裡 jquery-datatables-rails 同時還參考了 Rails Cast 的解說 RailsCast #340 DataTables Apr 11, 2012
做法真的相當的簡單
1 Gemfile 裡面增加
'jquery-datatables-rails', '~> 2.1.10.0.3'
2 安裝這個Gem,執行
bundle install
3 在 assets/javascript/application.js 裡面增加:
//= require dataTables/jquery.dataTables
要注意的是,如果原本的 application.js 裡面有 //= require_tree .
這個包進全部js的內容, 請把上面那行放在 require_tree 前面.
像是這樣
/app/assets/javascripts/application.js
1 2 3 4 |
|
4 在 assets/stylesheets/application.css 裡面增加
*= require dataTables/jquery.dataTables
如果原本的 application.css 裡面有或 *= require_tree .
這個包進全部 css 的內容, 請把上面那行放在 require_tree 前面. 像是這樣:
/app/assets/stylesheets/application.css
1 2 3 4 5 6 7 8 |
|
接著在希望可以產生變化的table 所屬的 js 檔案增加:
例如,我希望產生變化的view檔案是在 /app/views/patents/index.html.erb
所以我就應該去 assets/javascripsts/ 裡面找 patents.js 這個檔案,然後在裡面加上
1 2 3 |
|
第二行是指套上 Jquery 的功能,第三行是指再多增加分頁的功能
接著關鍵的地方就是要到view folder 的 index.html.erb 去設定 table 的一些屬性,讓 Jquery 可以找到這個table 原本的table那段的code 是這樣
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
有幾個項目要增加上去: 有 table id
, thead
, tbody
因此加上去後會變成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
要注意到 table 的 id 和 .js 檔案裡面的字串是要一樣的,這樣 jQuery 才會對應到是哪個table 要有變化. 如此一來就快速的套進了按照欄位排序,以及有基本的分頁功能了。