7

Ich versuche herauszufinden, wie Sie Assets in meiner application.js laden.Rails 4 - welche Reihenfolge jQuery und Bootstrap?

Ich habe diese erforderlichen Dateien (unter anderem) in meiner application.js.

//= require bootstrap-sprockets 
//= require jquery 
//= require jquery-ui 
//= require jquery_ujs 

Mein Juwel Datei hat:

gem 'jquery-rails' 
gem 'jquery-ui-rails' 

Wenn Bootstrap-Zahnräder vor jQuery ist, dann meine Bootstrap-Drop-Down-Menü (siehe unten) funktioniert gut.

Allerdings funktioniert in diesem Fall meine Registerkarte Show Funktion auf der folgenden Einrichtung nicht. Ich kann nicht auf die Tabs klicken. Wenn ich jQuery über Bootstrap-Kettenräder verschiebe, funktioniert es, aber dann funktioniert das Dropdown-Menü, das sonst funktioniert, nicht mehr.

<div class="row"> 
       <div class="col-md-10 col-md-offset-1"> 
        <div class="dp-tab-1"> 
         <ul class="dp-tab-list row" id="myTab"> 
          <li class="col-md-3 col-xs-6 active" > 
           <a href="#tab-guag-content-first"> 
            <span>MOTIVATION</span> 
           </a> 
          </li> 
          <li class="col-md-3 col-xs-6"> 
           <a href="#tab-guag-content-second"> 
            <span>OBJECTIVES</span> 
           </a> 
          </li> 
          <li class="col-md-3 col-xs-6"> 
           <a href="#tab-guag-content-third"> 
            <span>VISION</span> 
           </a> 
          </li> 

         </ul> 

         <div class="dp-tab-content tab-content"> 
          <div class="tab-pane row fade in active" id="tab-guag-content-first"> 

           <div class="col-md-12"> 
            <div class="tab-inner"> 

             <p class='medium-text'> 
              <%= @project.motivation %> 
             </p> 
             <br/> 
            </div> 
           </div> 
          </div> 

          <div class="tab-pane row fade" id="tab-guag-content-second"> 
           <div class="col-md-12"> 
            <div class="tab-inner"> 
             <p class='medium-text'> 
              <%= @project.objective %> 
             </p> 
             <br/> 
            </div> 
           </div> 
           <div class="col-md-6"> 
            <img class='wow fadeInUp img-responsive' src="images/iphone-mockup.png" alt=""/> 
           </div> 
          </div> 

          <div class="tab-pane row fade" id="tab-guag-content-third"> 

           <div class="col-md-12"> 
            <div class="tab-inner"> 
             <div class='services-content'> 
              <strong>Long Term Research Vision</strong> 
              <p class='medium-text'> 
               <%= @long_term %> 
              </p> 
             </div> 
             <div class='services-content'> 
              <strong>Immediate Challenge</strong>  
              <p class='medium-text'> 
               <%= @immediate_challenge %> 
              </p> 
             </div>  
             <br/> 
             <!-- <a class='btn btn-primary'>READ MORE</a> --> 
            </div> 
           </div> 
          </div> 

         </div> 
        </div> 
      <!- 

Wenn ich versuche, die Seite in dem Fall zu machen, wenn Bootstrap vor jQuery geladen wird, bekomme ich diesen Fehler in der Chrom-Inspektoren Konsole Registerkarte:

main.self-9711b4c….js?body=1:56 Uncaught TypeError: dp(...).tab is not a function(anonymous function) @ main.self-9711b4c….js?body=1:56dispatch @ jquery.self-660adc5….js?body=1:5227elemData.handle @ jquery.self-660adc5….js?body=1:4879 

Wie kann ich dieses Problem lösen, so dass ich kann sowohl das Dropdown als auch die Tabs funktionieren?

Meine ganze application.js ist:

//= require jquery 
//= require jquery-ui 
//= require jquery_ujs 
//= require bootstrap-sprockets 
//= require html.sortable 
//= require disqus_rails 
//= require moment 
//= require bootstrap-datetimepicker 
//= require pickers 
//= require masonry.pkgd.min 
//= require multipleFilterMasonry 
//= require main 
//= require hammer.min 
//= require jquery.animate-enhanced.min 
//= require jquery.countTo 
//= require jquery.easing.1.3 
//= require jquery.fitvids 
//= require jquery.magnific-popup.min 
//= require jquery.parallax-1.1.3 
//= require jquery.properload 
//= require jquery.shuffle.modernizr.min 
//= require jquery.sudoSlider.min 
//= require jquery.superslides.min 
//= require rotaterator 
//= require smoothscrolljs 
//= require waypoints.min 
//= require wow.min 
//= require underscore 
//= require gmaps/google 
//= require markerclusterer 
//= require infobox 
//= require chosen-jquery 
//= require cocoon 
//= require imagesloaded.pkgd.min 
//= require isotope.pkgd.min 
//= require jquery.counterup.min 
//= require jquery.pjax 
//= require custom.js 
//= require slider 
//= require bootstrap-slider 
//= require_tree . 

NÄCHSTE VERSUCH

Ich habe alle Vorschläge in diesem Beitrag versucht: keiner von ihnen für mich arbeiten: https://github.com/twbs/bootstrap-sass/issues/714

Antwort

3

Works perfekt.

Sie haben bootstrap.js vor der Jquery definiert. aber in jeder Anwendung sollten Sie jQuery oben definieren, also würde es zuerst geladen werden.

+0

Hallo @Prashant - danke für den hinweis. Das funktioniert leider nicht. Es funktioniert gut mit den Tabs, aber es bedeutet, dass das Bootstrap-Dropdown-Menü nicht funktioniert. Es gibt keine Fehler in der Chrom-Inspektor-Konsole und ich kann die Dropdown-Menüelemente im Chrom-Inspektor sehen, obwohl die Schaltfläche, die das Dropdown-Menü aufdecken soll, nichts bewirkt. Das Menü funktioniert nicht. Es funktioniert jedoch, wenn ich bootstrap über jQuery setze. Wenn ich das tue, funktionieren die Tabs im späteren HTML nicht. – Mel

+0

Können Sie bitte überprüfen Sie mit STRG + u im Internet, um die Reihenfolge von js zu überprüfen und auch prüfen, gibt es einen Konflikt, d. H. Doppelte js initialisieren in Ihrer App. und Sie können setzen // = Bootstrap-Ritzel nur erforderlich, die // = erfordern jquery –

+0

Hallo Prahsant. Könnten Sie mir bitte etwas genauer sagen, was ich überprüfen soll? Wie überprüfe ich die Reihenfolge der js? Ich bin auf einem Mac - Ctrl tut nichts. Könntest du auch klarstellen, was du meinst, indem ich Bootstrap-Ritzel einfach runtersetze. Vielen Dank für Ihre Hilfe – Mel

1

U r

data-toggle="tab" 

Das Beispiel der Arbeits Code fehlt:

<a href="#tab-guag-content-first" data-toggle="tab"> 
    <span>MOTIVATION</span> 
</a> 
... 
<a href="#tab-guag-content-second" data-toggle="tab"> 
    <span>OBJECTIVES</span> 
</a> 
... 
<a href="#tab-guag-content-third" data-toggle="tab"> 
    <span>VISION</span> 
</a> 
+0

Es funktioniert alles gut, wenn ich die Anwendung js neu anordnen (so dass Bootstrap unter jQuery ist). Aber das bedeutet, dass das Menü nicht funktioniert. – Mel

1

Erstens, ich werde Sie verwenden Edelsteine ​​zu übernehmen einen Teil der Vermögensgegenstände zu laden, wie jquery-rails . Ich sage das, denn wenn Sie die require_tree .-Anweisung haben, werden alle Dateien in Ihrer javascripts automatisch einbezogen. Zweitens, versuchen Sie application.js Einrichtung etwas wie folgt aussehen:

/* 
* This is a manifest file that'll be compiled into application.css, which will include all the files 
* listed below. 
* 
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. 
* 
* You're free to add application-wide styles to this file and they'll appear at the bottom of the 
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS 
* files in this directory. Styles in this file should be added after the last require_* statement. 
* It is generally better to create a new file per style scope. 
* 
*= require_tree . 
*= require_self 
*= require misc-stuff 
*= require jquery-stuff 
*= require bootstrap-stuff 
*/ 

ich bemerkt, dass Sie keine require_self Aussage im Snippet haben haben Sie zur Verfügung gestellt, so dass auch etwas mit Ihrem Problem zu tun haben.

Drittens können Sie einige CSS-Probleme haben.

+0

Ich habe Juwel 'Jquery-Schienen' und Edelstein 'Jquery-Ui-Schienen' in meiner Edelstein-Datei. Meinst du, dass ich Require-Tree setzen und Selbst am Anfang und dann alle Dateien verlangen Bootstrap ganz unten und alle Dateien Bezug auf jQuery direkt über Bootstrap mit allen anderen Dateien über jQuery? – Mel

+0

Können Sie mir einen Hinweis auf die CSS-Probleme geben, die Sie sehen können? – Mel

+0

Für Ihre erste Frage ja. Das sollte funktionieren. Für deine zweite Frage bin ich mir nicht sicher. Deshalb habe ich gesagt, dass du vielleicht Probleme damit hast. Ich habe auch bemerkt, dass Sie eine Reihe von benutzerdefinierten Javascripts haben (und ich kann nur davon ausgehen, dass Sie auch viele benutzerdefinierte Stylesheets haben), also könnte etwas in diesen die Ursache Ihres Problems sein. – T145

2

Das funktionierte für mich: https://stackoverflow.com/a/22977412/2860931 Es fühlt sich nicht wie eine tatsächliche Lösung - aber eher eine Arbeit um. Ich werde das jetzt für gut genug halten.Ich habe mindestens 30 verschiedene Lösungen ausprobiert, die an verschiedenen Stellen auf SO gepostet wurden.

1

Ok, was Sie dies brauchen, ist:

//= require jquery 
//= require jquery-ui 
//= require jquery_ujs 
//= require bootstrap-sprockets 

Jetzt Funktion funktioniert Ihre Registerkarte anzeigen und Ihr Menü nicht, lassen wir das aswell beheben.

dieses Skript zu Ihrer Seite hinzufügen:

<script> 
$('.dropdown-toggle').dropdown() 
</script> 
Verwandte Themen