正是我夢幻想要的啊!! 看完 DOM Scripting之後,對 Unobtrusive Javascript (可以參考 Jeremy Keith’s Behavioural Separation 的介紹) 念之不忘,想說 Rails 要怎麼支援 unobtrusive 跟degrades gracefully 的特性呢? 因為我們看到 Rails 內建的 helper 都是寫在HTML裡成 onclick = ‘xxx’ ,如支援 Ajax 的 link_to_remote 就是用 href=’#’ onclick=’new Ajax.Request(…)’ 云云。
所以我想是不是要改寫 link_to_remote之類的,另外寫套 helper 來讓 Javascrit 不要與HTML混在一起。不過… 今天在 Ajaxian Unobtrusive Ajax for Rails by Dan Webb 上看到介紹,有個 UJS Rails Plugins,可以讓你用它的 helper 掛 javascript 到 event (用CSS-selector) 上,而不用跟 (X)HTML 混在一起,達到網頁 Behavioural 的分離。
話不多說,請看作者的 Presentation Slides,真是太令人興奮了,作者的野心不小,非常令人期待。對網頁標準愛好者來說,這 plugin 真是太棒了。就算你不是基本教義派信徒,看到投影片的例子,焉不心動?… :p
寫了一個簡單的 UJS demo,搭配 RJS 超讚~ 不過我覺得 UJS 有點多管閒事的地方是它預設修改 Rails 的 link_to , link_to_remote, form_remote_tag 等成 Unobtrusive 版本,把 onclick 通通移除了,當場讓我之前的RJS demo爛掉,好險code不用再改,只需補上 javascript_include_tag :unobtrusive 即可。
至於degrades gracefully,因為連結都還保留著 href,所以就算使用者 Javascript 關閉,還是可以連到東西,只是server端要檢查是不是 ajax request 來決定回應什麼格式。