如何使用Rails在每次加载后触发javascript ajax部分?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (60)

有一个菜单项,触发ajax返回javascript partial是一个bootstrap模式。我遇到的问题是当用户第一次点击菜单项时,模态按预期打开。用户关闭模态并尝试再次打开它,它不会打开(尽管ajax会从后端再次触发)。

考虑以下代码(使用bootstrap 4):

Menu.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 partial):

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

user_profile / _user_profile.html.erb(bootstrap modal):

<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个模态之一。

提问于
用户回答回答于

在尝试了几件事情后,只需更换replaceWithhtmluser_profile/show.js.erb将导致AJAX每次射击。

旧:

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

新:

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

这样做的原因是因为它replaceWith正在替换父元素中的元素,因此不会再次触发,因为元素已经在第一次被替换。

扫码关注云+社区

领取腾讯云代金券