Rails: рендеринг ссылки с удалённым: true не запускает AJAX - PullRequest
0 голосов
/ 18 января 2019

У меня есть проект в Rails 3 с частичным _form_fields.html.erb, который отображается на странице и содержит удаленную ссылку:

<!-- a few form fields, then... -->
<%= link_to '+', new_my_controller_path, remote: true %>

Это обрабатывается контроллером и добавляет тот же самый частичный элемент под собой.

Контроллер:

def new
  respond_to do |format|
    format.js
  end
end

И связанный js.erb файл:

$('.field-wrapper').append("<%= escape_javascript(render(partial: 'form_fields', layout: false)) %>")

Все довольно стандартно, и ссылка, загруженная со страницей, работает как положено, отображая поля.

Однако, и вот моя проблема: при нажатии на эту ссылку на вновь отображаемом контенте она отправляется как обычная ссылка, игнорируя remote: true.

Кто-нибудь знает решение этой проблемы? Я не могу быть первым человеком, который столкнулся с этим, хотя не смог найти решение - дубликаты с радостью принимаются, если кто-то может найти его.

Заранее спасибо.

1 Ответ

0 голосов
/ 24 января 2019

Нашел решение этой проблемы после небольшой отладки.

Глядя на вывод терминала при переходе по ссылке, я заметил, что иногда он пытается отправить запрос через JS, за которым быстро следует HTML;другие, похоже, просто отправляют через HTML.

Это предполагает гонку между поведением по умолчанию и тем, что происходит в результате использования remote: true.

. Решение было вызвать e.preventDefault() наобработчик щелчков элемента:

$('.my-element').click(function(e) { e.preventDefault(); })

Не идеально, и я предполагаю, что исправлено в более новых версиях Rails, хотя здесь и есть небольшое замыкание:)

...