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

0

Как выбрать элемент clicked с помощью 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>

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

Теги:
ruby-on-rails-3
ujs

1 ответ

0

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

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

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

  • 0
    Это имеет смысл, но я ищу способ выбрать эту строку с чистым jQuery, если это возможно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню