rails 1.1以上版本提供了強大優雅的RJS,可能執行一個請求多個更新。
有些時候我們并不需要請求服務器,只想在瀏覽器上執行某些腳本更新,但又想使用RJS。所以為RoR增加了這項功能。
使用方法:
<script?language="javascript">
<%=?
render?:update?do?|page|
??page.define_action?'test_action'?do
????page.call_script?<<-EOS
??????alert(params.comment.title);
??????alert(params.comment.body);
????EOS
????page.replace_html?'errors',?'ERROR'
??end
??page.define_action?'link_action'?do
????page.replace_html?'errors',?'ERROR'
??end
end
%>
</script>
<div?id="errors"></div>
<%=?form_local_tag?:html?=>?{:action?=>?'test_action'}?%>
??<input?name="comment[title]"?/><br?/>
??<input?name="comment[body]"?/><br?/>
??<%=?submit_tag?'Create'?%>
<%=?end_form_tag?%>
<%=?link_to_local?'Test',?:action?=>?'link_action()'?%>
上面演示了form_local_tag和link_to_local的使用,打開這個頁面以后,可以關掉服務器測試,會發現它不請求服務器也能執行相應腳本。
define_action定義一個腳本函數,call_script用來實現javascript和RJS代碼的混合。當使用form_local_tag時,action方法的參數已經被處理過,所以可以直接在action中使用params.comment.title。
當然現在還不完善,比如還只能使用轉換完的頁面模板,一些動態頁面將看不出效果。要做到這點,需要用javascript實現一整套的ActionView輔助方法。
下面提供一個針對rails 1.1.2的一個補丁文件:
補丁文件下載