У меня довольно странная проблема с использованием Rails 4, Turbolinks и удаленной формы. У меня есть форму, похожую на:Rails turbolinks break submit remote form
<%= form_for [object], remote: true do |f| %>
<td><%= f.text_field :name, class: 'form-control' %></td>
<td><%= f.email_field :email, class: 'form-control' %></td>
<td><%= f.submit button_name, class: 'btn btn-sm btn-primary' %></td>
<% end %>
Эта форма добавляет (создает) новый объект. Однако он не всегда работает:
- Когда я загружаю страницу напрямую с помощью URL-адреса или обновления; он работает
- Когда я перехожу из своего приложения на эту страницу; он не работает
При отключении Turbolinks для этой ссылки страница работала отлично.
У меня есть два вопроса:
- Почему это не работает? Это потому, что удаленные обработчики не привязаны к кнопке из-за проблемы с JQuery/Turbolinks?
- Как я могу обойти эту проблему?
Заранее спасибо.
Решение
Благодаря @ богатому-клевать, решение было добавить кусочек JavaScript, который вручную отправляет форму при нажатии кнопки:
<%= javascript_tag do %>
var id = "#<%= dom_id(f.object) %>";
var inputs = $(id).parent().find('input');
console.log(inputs);
$(id).parent().find('button').on('click', function(e) {
e.preventDefault();
$(id).append(inputs.clone());
$(id).submit();
});
<% end %>
Этот код добавляет JavaScript в сформировать таблицу строк, получить входные данные, добавить их к идентификатору и отправить форму. ПредотвращениеDefault(); предотвращает отправку запроса дважды, когда страница обновляется, и форма фактически работает.
Спасибо за ваш ответ - форма действительно находится в таблице (мы используем какой-то превосходный вид с надстройкой внизу и строками которые являются inline-editable, поэтому это также станет причиной проблемы. Я добавлю часть Javascript для каждой строки, которая отправит форму, нажав на кнопку, чтобы решить эту проблему. – Silox
Вы можете попробовать руководство ajax звоните - заполняя данные из определенных элементов? –
Я действительно попробую это и вернусь к вам! – Silox