qiezi的学习园地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首页 :: 新随笔 ::  ::  :: 管理 ::
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的一个补丁文件:

补丁文件下载
posted on 2006-05-12 23:41 qiezi 阅读(501) 评论(0)  编辑 收藏 引用 所属分类: 自家破烂Ruby