Rails UJS - Выберите элемент, который щелкнул в файле js.erb?

Как выбрать выбранный элемент с помощью jQuery - используя $(this) и т. Д. - в ответе файла js.erb с сервера?

У меня есть таблица проектов, и я хотел бы иметь возможность вставить новый проект прямо под строкой, на которой я нажал кнопку "Добавить проект". Если возможно, я бы хотел использовать универсальный селектор jQuery и не полагаться на конкретные идентификаторы CSS.

Вот таблица моих проектов:

<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>

Ошибки не выбрасываются. Новый проект добавляется в базу данных правильно, но новая строка не вставляется в таблицу проектов. Любая помощь с этим будет принята с благодарностью.

1 ответ

Поскольку вы уже проходите :row в вашем действии create сохраните его в переменной экземпляра, чтобы он был доступен в вашем представлении. Тогда в вашем js.erb вы можете сделать

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

Так как это на самом деле будет id данного tr Вы должны просто быть в состоянии позвонить сразу.

Другие вопросы по тегам