Bootstrap / jQuery load order in Rails 5 breaking 无论我使用哪个顺序

Bootstrap / jQuery load order in Rails 5 breaking no matter which order I use

在我的 Rails 5 应用程序中,我们通过 Bootstrap / jQuery 使用下拉切换。问题是,无论我在 application.js 中加载 jQuery 和 Bootstrap 的顺序如何,控制台都会输出 "Bootstrap's JavaScript requires jQuery" - 或者 - 下拉列表只会在单击时路由到 /#。更改加载顺序暂时解决了这个问题,然后它又回来了。

首先,如果我在这里遗漏了什么,我深表歉意。这是我第一次 post Whosebug...

我们已将 application.js 加载顺序更改为:

(这不会抛出控制台错误,只是切换停止运行) .. //= 需要 jquery //= 要求 bootstrap ..

到 .. (这会抛出“Bootstrap JavaScript 在 JS 控制台中需要 jQuery” //= 要求 bootstrap //= 需要 jquery ..

来回几次

(检查了以下代码,所有标签都已关闭,我将它们缩写以显示共存的两个函数应该做什么)

application.js ..

//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require bootstrap
//= require jquery
//= require_tree .

快速编辑视图 ..

<div class="collapse" id = "quickedit-user-<%= user.id %>
    <%= render partial:users_quick_edit', locals { user: user } %>
</div>

.. 下拉导航

..

<li class="dropdown">
    <a href="#" id="dropdownMenu" class= "dropdown-toggle" data-toggle="dropdown">
         <%= current_user.username %> <b class="caret"></b> 
     </a>
     <ul class="dropdown-menu">
          <li><%= link_to "Profile", current_user %></li>

..

正确加载资产的结果应该是不仅下拉菜单的切换有效,而且 "quick edit forms" 也应该正常运行。我们没有看到这一点,因为它们在任何一个设置中都中断了。

你不应该在 bootstrap 之前要求 jquery 吗?在 application.js...

//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require jquery
//= require bootstrap
//= require_tree .

这个问题的答案与布局中的 turbolinks include 标记有关。默认情况下,它设置为 true,因此可以像这样禁用它:

<%= javascript_include_tag 'application', 'data-turbolinks-eval' => false %>

解决了我们遇到的问题。

我在网络上有同样的问题(下拉菜单不是功能性的,console.log 中有很多错误)我通过以其他顺序加载所有东西来解决(不确定是否在 Rails 中工作因为我不要使用它)。 (ps。尝试的第二种方法:如果您不使用 jquery 效果,那么就像替代方法一样 zepto.js 中有相同的 jquery 功能)

我在网络开发中使用这个:

<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<script src="bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="js/jquery-3.5.1.min.js"></script>

所以我从该文件夹将它们加载到本地服务器上,并且我使用 bundle cause contains popper。并按此顺序排列它们,我不会再有任何错误。 不确定在您的案例中是否有类似的东西