Отправленный внедренный link_to remote в форму remote вызывает запуск формы ajax - PullRequest
0 голосов
/ 09 октября 2018

Рассмотрим код ниже:

<script>
  $('#edit_profile_1').on('ajax:before', function(e) {
      alert('ajax:before');
  }).on('ajax:success', function(e) {
      // the form saved, alert the user via frontend visual changes
  });
</script>

<%= form_for @profile, remote: true do |f| %>
    <p>... Some stuff in form ...</p>
    <%= link_to some_path(@profile.some_fk_id), remote: true do %>
        Some Link
    <% end %>
    <%= f.button :submit do %>
        Save
    <% end %>
    <p>... some footer stuff</p>
<% end %>

При отправке формы выше все работает как положено.Однако при нажатии на <% link_to %> в приведенной выше форме, он также запускает AJAX формы.

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

У меня вопрос: как сохранить форму удаленной от запуска, когда я хочу, чтобы только ссылки были удаленыуволить?

1 Ответ

0 голосов
/ 09 октября 2018

Итак, подход, который я выбрал, состоял в том, чтобы проверить тип объекта, с которым я имею дело, в javascript, используя код, аналогичный приведенному ниже (вы можете сделать еще один шаг и проверить идентификаторы для нескольких форм - или то, что мы сделали внаш реальный код был extend переменными параметров javascript и pass):

<script>
    $('#edit_profile_1').on('ajax:before', function(e) {
        if ($(e.target).is('form')) {
            alert('do something with form');
        } else {
            alert('do something with a non-form');
        }
    }).on('ajax:success', function(e) {
        if ($(e.target).is('form')) {
            // ...
        } else {
            // ...
        }
    });
</script>

Не уверен, что это самый эффективный способ справиться с этим, но он работает для того, что нам нужно.

...