Rails 3中的UJS局部渲染

8
我很难理解如何在Rails中实现UJS(特别是在Rails 3与jQuery中)。我已经完成了Ryan's Railscast,并且可以在通过AJAX提交表单时知道该怎么做,但我在将此概念扩展到在我的视图文件中将JavaScript函数附加到HTML元素时遇到了问题。最终,我想创建一个表单,根据所选系列中的单选按钮不同而呈现不同的部分。我应该考虑使用Prototype遗留帮助程序吗?什么时候需要创建.js.erb文件?
抱歉问得比较新手,我找不到明确阐述UJS概念以及如何在Rails应用程序中使用它/从RJS方法切换代码的信息。任何帮助都将不胜感激!
4个回答

8
通过在表单中使用remote => true,您的数据将发送到服务器,并且所有返回的javascript将在页面上下文中执行,这里是一个简单的示例:
<%= form_tag '/action_path', :remote => true do %>
  <%= radio_button_tag 'partial', 'one' %>
  <%= radio_button_tag 'partial', 'two' %>
  <%= submit_tag 'select' %>
<% end %>

<div id="partial_holder">

</div>

在服务器上

def action
  #do whatever you want with parameters
end

在action.js.erb文件中
$('#partial_holder').html("<%= escape_javascript(render(:partial => params[:partial])) %>")

谢谢您的回复 - 问题是,我不想让表单提交本身变得AJAXy,只想让表单内的元素变得AJAXy... - Budgie
1
如果只有表单的部分将被 AJAX 发送,您将不得不要么制作多个表单,要么简单地编写自定义 JavaScript 以便发送包含表单元素的请求。没有任何代码或示例,很难确切理解您想要做什么 :/ - Draiken
从我所了解的情况来看,Rails 3 要求开发人员通过删除许多辅助方法来编写更多自己的 JavaScript 代码,因此感谢您对自定义 JavaScript 的评论 - 我只需要稍微提高一下我的 js 技能! - Budgie
我遇到了和@Sonia一样的问题,添加<div id="partial_holder">解决了这个问题! - Kyle

1

在 action.js.erb 文件中

$('#partial_holder').html(<%= escape_javascript(render(:partial => params[:partial])) %>)

上述代码有一个小错误,html方法中的ruby标签应在引号内。以下代码将正常工作。

$('#partial_holder').html("<%= escape_javascript(render(:partial => params[:partial])) %>")

0

出于某些奇怪的原因,上述解决方案对我来说不起作用。这个可以:

Element.replace('element_id', '<%= escape_javascript(render(:partial=>"foo")) %>');

注意包围 Ruby 块的引号。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接