当前位置: 首页 > 面试题库 >

Rails 4使用ajax,jquery,:remote => true和response_to渲染部分内容

桂阳文
2023-03-14
问题内容

用AJAX响应提交的表单动态呈现页面似乎很常见。其他类似问题都没有集中于如何以一般方式进行此操作。

我可以找到的关于该主题的最佳博客文章位于:http : //www.gotealeaf.com/blog/the-
detailed-guide-on-how-ajax-works-with-ruby-on-
rails

问题:如何编写Rails应用程序的代码,以便在提交表单或单击链接时可以触发通过AJAX加载的局部视图?


问题答案:

要使此功能正常运行,必须存在一些事情,包括触发元素上的:remote =>
true标志,控制器的类定义中的response_to:js标志,路线,局部视图,最后是jquery实际呈现动态效果。部分必须包含在单独的.html.js文件中。

以下示例是“ someajax”控制器的虚拟“ render_partial_form”方法的示例。

1)在触发元素上添加:remote = > true标志,将
.remote => true标志放在要触发AJAX调用的元素的.html.erb文件(视图)的链接或表单标记中,喜欢

<%= form_tag("/someajax", method: 'post', :remote => true) do %>

使用:remote =>
true时,rails不会自动切换视图,从而允许运行JQuery。可以与form_tag,link_tag或其他类型的标签一起使用。

2)在控制器顶部添加“ respond_to:html,:js”在

控制器类定义的顶部,您现在必须指定控制器可以响应javascript和html:

class SomeajaxController < ApplicationController
   respond_to :html, :js

   ...

   def render_partial_form
      @array_from_controller = Array.new

      ...

   end
end

在此示例中,有一个变量从控制器传递到视图中:一个名为的选择列表选项数组@array_from_controller

3)将http谓词路由到您的控制器的方法

由于我希望使用POSTed形式来触发AJAX调用,因此我将控制器的谓词verb路由到了render_partial_form视图。

post 'someajax' => 'someajax#render_partial_form

定义的controller方法def render_partial_form与视图名称匹配,_render_partial_form.html.erb因此无需从控制器调用渲染操作。

4)创建局部视图
局部视图应与您的控制器方法同名,并以下划线开头:_render_partial_form.html.erb

<h3>Here is the partial form</h3>

<%= form_tag("/next_step", method: 'post') do %>
    <%= label_tag(:data, "Some options: ") %>
    <%= select_tag(:data, options_for_select(@array_from_controller.transpose[0].collect)) %>
    <%= submit_tag('Next') %>
<% end %>

5)创建JQuery文件

jQuery语句触发表单的呈现。将“
render_partial_form”替换为控制器方法和部分视图的实际名称。slideDown效果是可选的“眼睛糖果”。创建一个扩展名为.js.erb的文件,其名称与您的控制器相同:

render_partial_form.js.erb

$('#render_partial_form').html("<%= escape_javascript (render partial: 'render_partial_form') %>");
$('#render_partial_form').slideDown(350);


 类似资料:
  • 问题内容: 我有一个呈现部分视图的控制器动作: 然后将返回的内容加载到动态元素中,如下所示: 因此,这将创建一个div,然后将返回的内容加载到该div中。 我想对此稍作更改,以便仅在对控制器的调用成功的情况下创建容器div。 所以: jQuery调用控制器动作 控制器返回PartialView,如果找不到ID,则返回null 如果返回PartialView,则将创建容器并使用返回的内容加载该容器。

  • 问题内容: 我检查了这个问题,它解决了我的最初问题。但是我不希望仅当用户单击链接时才显示部分视图,我希望在页面加载时显示部分视图,并且可能在加载部分视图时显示进度指示器。 如何实现? 非常感谢您阅读本文。 问题答案: 如果要加载页面,然后通过ajax加载部分视图,则可以创建一个执行以下操作的对象: 然后在您的页面中执行以下操作:

  • 问题内容: 我在MVC应用程序中有此标记。 当它运行时,IngredientsListControl.ascx在浏览器中显示为新页面,并且不会更新Ingredientlistdiv。 这是我的控制器动作 我在这条线上做对了吗? 这就是我将控件呈现到div中的方式,以便它不会加载新页面。 马尔科姆 问题答案: 使用此功能时: …您应该注意,这与 它不会引发onsubmit事件,并且不会调用MVC的A

  • 问题内容: 我有一个带有选项卡的页面,我想在单击选项卡时仅通过ajax渲染不同的部分。我有一些代码,但我认为这不是最有效的方法。我希望有人能帮助我解决已经存在的代码,或者如果有一种更简单的方法,我将不胜感激。谢谢! HTML标签 学校负责人 最新JS 路线 问题答案: 请参阅我对上一篇文章的回答。这将为您提供一个在Rails中的AJAX想法:完成模型#更新后显示模型#新表单 您可以做的是在操作中呈

  • 问题内容: 我有一些记录。单击每条记录后,需要在手风琴中显示信息。 该信息应该从数据库动态获取。 到目前为止,我所做的是 创建局部视图。那是为了显示详细信息。 在记录上单击后,我调用jquery方法并在控制器上执行我的方法。控制器以Json的形式返回对象(或任何其他东西,打开以获取任何建议)。 现在,JQuery方法具有该(模型)对象,但是如何使用它来呈现其局部视图。 问题答案: 我有一些记录。单

  • 问题内容: 如何使用jquery渲染局部视图? 我们可以这样渲染部分视图: 我们如何使用jquery做同样的事情? 问题答案: 我已经使用ajax加载来做到这一点: