2011-07-22 60 views
1

我想轉換此爲Rails 3轉換form_remote_tag來的form_for爲Rails 3 UJS

<%= form_remote_tag :url => feedback_url, 
    :update => 'flash_message', 
    :before => "doSomething()", 
    :condition => "condition()", 
    :complete => "doSomethingElse();" -%> 

這裏是我到目前爲止

<%= form_tag feedback_url, :remote => true, :id => 'form' do %> 
    <%# Gather data %> 
<% end -%> 
<script> 
    $(function() { 
     $("#form").bind("ajax:beforeSend", function() { 
      doSomething(); 
     }).bind("ajax:success", function() { 
      doSmomethingElse(); 
     }); 
     }); 
    }); 
</script> 
+0

看起來你很好。你有什麼特別的麻煩嗎? – coreyward

+0

':condition'和':update'選項。 – maletor

+0

在此示例中,表單ID'feedback_form'和jQuery選擇器'#form'不匹配。 – tfentonz

回答

1

我喜歡做這樣的方式略有不同。

<%= form_tag feedback_url, :remote => true, :id => 'feedback_form' do %> 
    ... 
<% end %> 
<script type="text/javascript"> 
    $("form#feedback_form").submit(function(event){ 
    $('flash_notice').css('display', 'block'); 
    return condition() == true 
    }); 
</script> 

如果表單的提交處理程序返回false,那麼它將不會提交表單。 (我敢肯定,情況是這樣,但event.preventDefault()可能工作,如果沒有) 這也將照顧以前的條件。

對於完整和更新,但我覺得使用不同的模板更好。例如,讓我們說你的表單提交給某個控制器的'新'動作。你可以有

$('flash_notice').css('display', 'none') 
    doSomething(); 

模板new.js.erb在這個模板中,您還可以訪問控制器的實例變量定義。

+0

提交事件是否真的被':remote => true'提交的AJAX提交表單觸發? – coreyward

+0

它確實如此。我剛剛檢查過,當你返回false時,它實際上並不會引發AJAX事件。 – Olives

+0

很酷。使用UJS'ajax:beforeSend'掛鉤可能有一個爭論,並且從中返回false以阻止請求發生。 – coreyward