2008-11-19 18 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