Запускайте javascript ajax после каждой загрузки с использованием рельсов - PullRequest
0 голосов
/ 14 октября 2018

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

Рассмотрим следующий код (с помощью начальной загрузки 4):

Меню.html.erb:

<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink">
    <%= link_to user_profile_path(current_user.user_profile.id), remote: true, class: "dropdown-item" do %>
        <%= fa_icon "id-card", text: "Profile Settings" %>
    <% end %>
</div>
...
<div id="user_profile"></div>

user_profile / show.js.erb (ajax js частично):

$("#user_profile").replaceWith("<%= j render "user_profile" %>");

user_profile / _user_profile.html.erb (модал начальной загрузки):

<script>
    $('#user_profile_modal').modal('show');
</script>

<%= form_with model: @user_profile do |f| %>
    <div class="modal fade" id="user_profile_modal" tabindex="-1" role="dialog">
        <div class="modal-dialog modal-lg" role="document">
        ...
        </div>
    </div>
<% end %>

Есть ли способ запустить modal('show'); каждый раз, когда модал запускается из бэкэнда?Кстати, это всего лишь один из 3 модалов, которые загружаются таким образом на страницу.

Еще раз спасибо!

1 Ответ

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

После нескольких попыток простая замена replaceWith на html в user_profile/show.js.erb вызовет срабатывание Ajax каждый раз.

Old:

$("#user_profile").replaceWith("<%= j render "user_profile" %>");

Новое:

$("#user_profile").html("<%= j render "user_profile" %>");

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

Надеюсь, что это поможет любому в будущем!

...