0

如何在来自服务器的 js.erb 文件响应中使用 jQuery 选择单击的元素 - 使用 $(this) 等?

我有一个项目表,希望能够在我单击“添加项目”按钮的行下方插入一个新项目。如果可能的话,我想使用一个通用的 jQuery 选择器,而不必依赖特定的 css id。

这是我的项目表:

<table class="table">
  <tr class="active">
   <th style="width:31%">Project</th>
   <th style="width:42%">Notes</th>
   <th style="width:10%">Due</th>
   <th style="width:8%">Priority</th>
   <th style="width:3%"></th>
   <th style="width:3%"></th>
   <th style="width:3%"></th>
  </tr>
 <% @projects.each_with_index do |project, index| %>
  <tr id="row-<%= index + 1 %>">
   <td><%= project.title %></td>
   <td><%= project.notes %></td>
   <td><%= project.due_date %></td>
   <td><%= project.priority %></td>
   <td><a href="#">Edit</a></td>
   <td><a href="#">Del</a></td>
   <td><%= link_to "+", new_project_path(@project, :row => index + 1), :remote => true, :class => "add-project" %></td>
  </tr>         
 <% end %>                      
</table>

这是我的创建操作:

def create
    @project = Project.new(params[:project])
    @project.save
    respond_with(@project)
end

这是我的 create.js.erb 文件:

$(this).closest("tr").after("<%= j(render "new_project_row") %>");

这是我的 new_project_row 部分:

<tr>
    <td><%= @project.title %></td>
    <td><%= @project.notes %></td>
    <td><%= @project.due_date %></td>
    <td><%= @project.priority %></td>
    <td><a href="#">Edit</a></td>
    <td><a href="#">Del</a></td>
    <td>#</td>
</tr>

没有错误被抛出。新项目已正确添加到数据库中,但未将新行插入到项目表中。对此的任何帮助将不胜感激。

4

1 回答 1

0

由于您已经:row在创建操作中传递了,将其保存到实例变量中,以便在您的视图中可用。然后在你的 js.erb 你可以做

$("##(@row)").after("<%= j(render "new_project_row") %>");

因为它实际上是id给定的,所以tr你应该可以直接调用 after。

于 2013-11-06T01:25:58.693 回答