Bootstrap 3下拉列表不适用于Rails 4和Turbolinks

tob*_*yte 10 jquery ruby-on-rails twitter-bootstrap turbolinks twitter-bootstrap-3

我最近将我的网站升级到Bootstrap 3,并且正在浏览所有布局以更新类名和各种功能以正常工作.我最近的问题是下降似乎不起作用.起初我以为我没有正确地为我的导航栏实现代码,但是在感到沮丧之后,我实际上只是试图摆脱我的导航栏并直接使用BS 3文档中的一个.即使该代码也不起作用.我已经研究过了,我相当确定我已经加载了所有正确的.js库.这是我的application.js:

//= require jquery
//= require bootstrap-sprockets
//= require jquery.ui.datepicker
//= require jquery.timepicker.js
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require jquery.remotipart
//= require chosen-jquery
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

这是我出现的内容<head>:

  <script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/affix.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/alert.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/button.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/carousel.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/collapse.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/dropdown.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/tab.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/transition.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/scrollspy.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/modal.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/tooltip.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/popover.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap-sprockets.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.core.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.datepicker.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.timepicker.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.iframe-transport.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.remotipart.js?body=1"></script>
Run Code Online (Sandbox Code Playgroud)

我在同一页面上有弹出窗口和其他可折叠项目,并且一切正常,所以我相当确定所有.js都很机智.

我在其他地方读过,turbolinks可能会为Bootstrap 3带来问题,甚至尝试(然后放弃并恢复)jquery.turbolinks gem也无济于事.不用说,我不知道如何在jsfiddle上重现这个(对不起).

最后,我已经验证每次单击下拉列表时都会调用以下四个js函数,大概按以下顺序:

的jquery.js:4306

            eventHandle = elemData.handle = function( e ) {
                // Discard the second event of a jQuery.event.trigger() and
                // when an event is called after a page has unloaded
                return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
                    jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
                    undefined;
            };
            // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
            eventHandle.elem = elem;
Run Code Online (Sandbox Code Playgroud)

turbolinks.js:324

    installClickHandlerLast = function(event) {
        if (!event.defaultPrevented) {
            document.removeEventListener('click', handleClick, false);
            return document.addEventListener('click', handleClick, false);
        }
    };
Run Code Online (Sandbox Code Playgroud)

tujquery.js:4306(再次)

turbolinks.js:324

    handleClick = function(event) {
        var link;
        if (!event.defaultPrevented) {
            link = extractLink(event);
            if (link.nodeName === 'A' && !ignoreClick(event, link)) {
                visit(link.href);
                return event.preventDefault();
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

任何线索可能会发生在这里以及如何解决它?

She*_*yar 13

无需使用即可解决此问题jquery-turbolinks.你需要先了解为什么会这样.启用turbolinks并单击链接后,将page:change触发一个事件,并从新加载的html重新评估所有javascript.

这包括加载的bootstrap javascript代码application.js.当bootstrap的javascript重新加载时,它会中断.您可以通过data-turbolinks-eval=false在application.js <script>标记中使用来解决此问题.

对于再培训局:

<%= javascript_include_tag 'application', 'data-turbolinks-eval' => false %>
<%= javascript_include_tag params[:controller] %>
Run Code Online (Sandbox Code Playgroud)

对于SLIM:

== javascript_include_tag 'application', 'data-turbolinks-eval': false
== javascript_include_tag params[:controller]
Run Code Online (Sandbox Code Playgroud)