Ruby约$(“#form> form”)。replaceWith(“<%= escape_javascript(render(:partial =>”form“))%>”)

时间:2013-01-24 16:30:06

标签: jquery css ruby-on-rails ruby

**任何专家都可以解释为什么在edit.js中使用$(“#form> form”),而不是$(“#form”)??

以下是一些相关代码:**

内部控制器(app / controllers / entries_controller.rb)

def edit
    @entry = Entry.find(params[:id])
    respond_to do |format|
      format.html 
      format.js
    end
  end

在app / views / entries / edit.js.erb模板中设置值到表单中,这里是代码:

$("#form > form").replaceWith("<%= escape_javascript(render(:partial => "form"))%>")

索引页面(app / views / entries / index.html.erb)

<h2>Entry form</h2>
<div id="form">
  <%= render :partial => "form" %>
</div>

表格部分(app / views / entries / _form.html.erb)

<%= form_for(@entry, :remote => true) do |f| %>
    <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :address %><br />
    <%= f.text_area :address, :rows => 3 %>
  </div>
  <div class="field">
    <%= f.label :phone %><br />
    <%= f.text_field :phone %>
  </div>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

3 个答案:

答案 0 :(得分:0)

这不需要专家。 $("#form > form")表示form标记,它是具有id=form的DOM的子标记。

<%= form_for(@entry, :remote => true) do |f| %>生成的表单是<div id="form">

的子项

答案 1 :(得分:0)

#form选择器选择id form的元素 - 在本例中为<div>元素。

#form > form选择器选择表单元素,该表单元素是id form元素的直接子元素 - 在这种情况下,<form>元素直接位于<div id="form">内1}}元素。

您想要替换表单本身,而不是包含它的<div>,因此您要选择<div id="form">元素内的表单。

答案 2 :(得分:0)

$("#form")会将<div>id=form第2行的index.html.erb相匹配

$("#form > form")匹配此<form>中的<div id=form>标记。当您从<div>内部渲染部分时,<form>实际上就是您搜索它的位置。