Rails 5 - Turbolinks 5, einige JS nicht geladen auf Seite rendern

8

Ich habe eine Rails-App, die ich kürzlich auf 5.0.0.RC1 aktualisiert habe. Der Großteil des Übergangs verlief reibungslos, aber ich habe Probleme mit den neuen Turbolinks. In meiner App verwende ich zum Beispiel dieses Juwel:

%Vor%

Meine application.js -Datei sieht so aus:

%Vor%

Wenn ich auf einen Link klicke und eine Ansicht rendere, funktioniert mein chosen-query ( best_in_place nicht so gut) nicht beim ersten Laden, aber wenn ich eine harte Aktualisierung der Seite mache, funktioniert es . Unten ist ein Bild des Ergebnisses, das ich bekomme:

Und hier ist ein Bild davon, wie ich es aussehen soll:

Auch hier funktioniert das erwartete Aussehen, wenn ich die Seite hart auffrische, aber nicht nach einer normalen redirect_to ...

Der Code für mein Dropdown sieht folgendermaßen aus:

%Vor%

Nach einem redirect_to ergibt sich folgendes HTML:

%Vor%

... und nach einem erneuten Laden der Seite bekomme ich folgendes:

%Vor%

In einer .coffee Datei versuche ich chosen folgendermaßen zu initialisieren:

%Vor%

Irgendwelche Ideen, was ich falsch mache?

    
Anders 13.06.2016, 19:31
quelle

6 Antworten

15

Bei Turbolinks wird das Javascript nur einmal geladen. Auf der Hard-Aktualisierung funktioniert chosen , weil die gesamte Seite neu gerendert wird. Sobald Sie auf einen Link klicken, entschlüsselt Turbolinks die Anfrage und wandelt sie in eine Ajax-Datei um (anstelle einer vollständigen Seitenaktualisierung). Sobald die Anfrage eingeht, ersetzt Turbolinks nur die body der Seite und belässt die JS im selben Zustand wie zuvor.

Um das zu beheben, müssen Sie Ihren gewählten Initialisierer in das turbolinks:load -Ereignis wie folgt einfügen

%Vor%

Weitere Informationen finden Sie unter Ссылка

    
patkoperwas 13.06.2016, 20:29
quelle
7

Hier ist meine Lösung mit Turbolinks 5 und jQuery:

  1. install gem 'jquery-turbolinks'

  2. Fügen Sie diese .coffee-Datei Ihrer App hinzu: Ссылка

  3. nennen Sie es turbolinks-compatibility.coffee

  4. unter application.js

  

// = erfordert jquery
  // = erfordert jquery_ujs
  // = erfordert jquery.turbolinks

     

// = Turbolinks erfordern   // = Turbovolumenkompatibilität erfordern

    
Lowryder 12.09.2016 16:41
quelle
1

Ich habe ernsthafte Kopfschmerzen, um einen Weg zu finden, mein gesamtes JavaScript zum Laufen zu bringen. Zuerst versuche ich die Lösung mit dem Juwel jquery.turbolinks, indem Sie diesem Video folgen: Wie man auf turbolinks 5 aufrüstet , aber ich Ich habe Lightbox erhalten, weil die Bilder auf derselben Seite nicht richtig funktionieren. Also bevor ich Turbolinks ein für allemal deaktiviere, nehme ich mir mehr Zeit auf der Seite von github und ich versuche das:

%Vor%

Sie müssen das auf jeden Link setzen, wo das JavaScript eine Seite neu laden muss, um zu funktionieren.

Vielleicht ist es nicht die beste Lösung, aber das macht meine Kopfschmerzen weniger schmerzhaft.

    
VendezTrouvez 24.08.2016 01:16
quelle
0

Turbolinks und Jquery sind ein bisschen Kopfschmerzen. Anstatt eine Aktion für das Dokument bereit zu machen, auf Seite: load sollte besser funktionieren, denn bei Turbolinks lädt es nicht die gesamte Dokumentation neu, wenn Sie die Website durchsuchen. So etwas kann funktionieren:

%Vor%     
Ronan Lopes 13.06.2016 20:33
quelle
0

Ich habe versucht, das selbst zu lösen und eine Lösung gefunden, die für mich funktioniert.

Mein Problem war, dass ich ein Forum mit einer "Zitat" -Funktionalität für Kommentare hatte. Mit Turbolinks 5 habe ich mehrere Event-Listener bekommen und endete mit bis zu vier Zitaten aus demselben Kommentar in meinem Editor.

Ich habe bei Idempotenz gelesen und hier eine Lösung gefunden: Wie man jQuery 'bind' oder 'on' Event Handler idempotent macht

Ich habe eine globale Funktion, die ich in meiner Datei globals.coffee für Ereignisse verwende, erstellt (wirklich kopiert).

%Vor%

Und es funktioniert.

Meine Funktionen sehen so aus:

%Vor%

Alle Werte dafür gehen an: Pointy , der die Lösung geliefert hat.

Link zu Turbolinks und Idempotenz

    
Björn Grunde 22.04.2017 13:11
quelle
0

Hier ist, was ich tue .. Turbolinks5 um mehrfach geladen zu verhindern.

%Vor%     
Marcelo Austria 22.06.2017 02:59
quelle