[RoR] 用javascript脚本模拟一个action

阅读更多
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的一个补丁文件:

补丁文件下载

你可能感兴趣的:(脚本,JavaScript,Rails,浏览器,HTML)