2008-11-19 43 views
1

我有一個表格,我(使用原型和內置的軌道「form_remote_tag」助手)通過AJAX提交。
我想更新一個div(一個狀態區),如果有表單驗證錯誤,但是如果提交成功完成,則會有一個不同的div(表單所在的div)。更新不同的div

我的代碼看起來是這樣的:

<div id="recipe-status"><!-- I want form validation errors to go here --></div> 
<div id="recipe"> 
    <%= form_remote_tag(:update => "recipe-status", 
     :before => "Element.show('wait-indicator')", 
     :success => "Element.hide('wait-indicator')", 
     :complete => visual_effect(:appear, "recipe-status"), 
     :url => { :action => 'import', :id => @recipe.id }, 
     :failure => "alert('Unable to import recipes at present')") %> 
    <-- Form goes here, I want this to be replaced if the submit succeeds --> 
</div> 

我能想到這樣做的唯一方法是返回一個HTTP錯誤狀態,如果有一個驗證錯誤,但似乎像一個黑客攻擊的一位。 有沒有更乾淨的方法呢?

回答

1

我會檢查出最新的Railscasts on jQuery以及一個older episode on RJS templates。這些應該可以讓你和AJAX和你的Rails應用程序很好地運行,並使一切正常和乾淨地工作,沒有任何黑客。

看了看你的代碼,我會建議使用jQuery(參見上面的插曲),你會從表格中提取所有的javascript(這是一件很好的事情)。

看來你得下來的技術,所以你很快就會拿起用jQuery寫不顯眼的Javascript和機會是你最終會更快樂的人與一個更清潔的應用程序。 :)

祝你好運!

+0

你是否建議我的函數返回JSON而不是模板?我確實認爲這是一個解決方案,但它似乎很難將錯誤消息傳回。 或者你只是建議我從Prototype切換到JQuery? – 2008-11-19 18:51:00

+0

我建議換掉jQuery。無需JSON,觀看上面鏈接的jQuery Railscasts,它基本上解釋了您的任務所需的一切。 – mwilliams 2008-11-19 18:56:25

1

我會建議,作爲另一個答案注意的是,你看看使用jQuery。然而,這將需要一些斜坡上升是肯定的,使用Rails默認設置,從而堅持,讓您可以更快速地向前發展......

你想看看是直列RJS什麼。而不是在form_remote_tag調用中做所有事情,你可以在你的控制器中做你的AJAX更新。這樣,您就可以管理是否存在驗證錯誤的邏輯,並根據這一點執行一個或另一個AJAX更新(取決於任何div)。

對於初學者見this post by Jamis Buck