Ajax Forms

3.4. Ajax Forms
来看看Ajax表单,我们所需要做的工作就是把form_tag 换成form_remote_tag来转换响应的方式并且给响应留出插入的位置来:
<%form_remote_tag :update=>"reverse" ,:url=>{:action=>"reverse"} do%>
  <label>Text to reverse:</label>
<%=text_field_tag :text_to_reverse%>
<%=submit_tag "Reverse"%>
 
<%end%>
 
<div id="reverse"></div>
这段代码里的option内容看起来非常眼熟,因为它跟link_to_remoteoption的内容一样。:update选项指明了Ajax响应后更新HTML元素,:url提供了Ajax响应的URL。试着在浏览器中运行一下这个新表单,你会得到下图所示的这样:
好像跟我们预期的效果不太一样。
Layout被呈现了两次,问题就在于每个action(这里是reverse)会默认的呈现layouts/application.rhtml模板。为了指定版面的显示(或者关闭layout),在action里需要清楚的声明:
def reverse
  @reversed_text = params[:text_to_reverse].reverse
  render :layout => false
end
加上这行,再回到浏览器,刷新下,看看结果,现在跟我们的预期是一样的了。
对于这个响应结果form_remote_tag使用了PrototypeAjax.Updater,就像link_to_remote中的一样。
<form action="/chapter3/reverse" method="post"
   onsubmit="new Ajax.Updater('reversed','/chapter3/reverse',
     {asynchronous:true, evalScripts:true,
      parameters:Form.serialize(this)});
     return false;">
 
onclick截获link行为一样,onsubmit截获form提交的行为。
 
form_for(用来创建模型对象对应的表单)的Ajax副本是remote_form_for.使用remote_form_forform_for差不多,只是要加上一些包含Ajax选项的hash,例如:update:complete




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/91355,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值