Turbolinks verhindert normale $(document).ready()
Ereignisse abfeuern bei allen Seitenbesuchen neben der anfänglichen Belastung, wie diskutiert here und here. Keine der Lösungen in den verknüpften Antworten funktioniert jedoch mit Rails 5. Wie kann ich Code bei jedem Seitenaufruf wie in früheren Versionen ausführen?
Antwort
Anstatt auf das Ereignis ready
zu hören, müssen Sie sich bei jedem Besuch einer Seite an einem Ereignis beteiligen, das von Turbolinks ausgelöst wird.
Leider wurde Turbolinks 5 (die Version, die in Rails 5 angezeigt wird) neu geschrieben und verwendet nicht die gleichen Ereignisnamen wie in früheren Versionen von Turbolinks, wodurch die angegebenen Antworten fehlschlagen. Was ist funktioniert nun das turbolinks:load Ereignis zu hören, wie so:
$(document).on('turbolinks:load', function() {
console.log("It works on each visit!")
})
Mit dem leichtgewichtigen gem jquery-turbolinks.
Es macht $(document).ready()
arbeiten mit Turbolinks ohne bestehenden Code zu ändern.
Alternativ können Sie $(document).ready()
einem der ändern:
$(document).on('page:fetch', function() { /* your code here */ });
$(document).on('page:change', function() { /* your code here */ });
je nachdem, welche besser geeignet in Ihrer Situation ist.
Während wir auf die Reparatur dieses wirklich coolen Edelsteins warten, war ich in der Lage, weiter voranzukommen, indem ich Folgendes änderte:
addCallback: (callback) ->
if $.turbo.isReady
callback($)
$document.on 'turbo:ready', -> callback($)
zu:
addCallback: (callback) ->
if $.turbo.isReady
callback($)
$document.on 'turbolinks:load', -> callback($)
bin ich noch nicht bewusst, was diese nicht lösen, aber es schien gut auf Erstprüfung zu arbeiten.
Hier Lösung, die für mich arbeiten, von here:
installieren
gem 'jquery-turbolinks'
diese .coffee Datei zu Ihrer App hinzufügen: https://github.com/turbolinks/turbolinks/blob/master/src/turbolinks/compatibility.coffee
Name es turbolinks-Kompatibilität. Kaffee
bei Anwendung.js
//= require jquery //= require jquery_ujs //= require jquery.turbolinks //= require turbolinks //= require turbolinks-compatibility
Wie wäre es mit 'production' env ? Hast du es ausprobiert? Es gibt einige Leute, die sagen, dass es einfach nur im Entwicklungsmodus funktioniert. –
Für mich funktioniert es in der Produktion – ChaosPredictor
Das Juwel ist veraltet – Mauro
Einheimische JS:
document.addEventListener("turbolinks:load", function() {
console.log('It works on each visit!');
});
Diese meine Lösung ist, außer Kraft setzen jQuery.fn.ready
, dann $(document).ready
Arbeiten ohne Änderung:
jQuery.fn.ready = (fn)->
$(this).on 'turbolinks:load', fn
Das ist genau das, was ich brauchte. Dies funktioniert für externe Bibliotheken, die ebenfalls auf "Dokument" -Rückrufe angewiesen sind. Warum der Downvote? Dies sollte sicher sein, solange Turbolinks in der gesamten Anwendung verwendet werden, oder? –
Verwendung:
Anstelle von: $(document).on('turbolinks:load', function() {...})
Ich habe das getan und ich bekomme immer noch dieses Problem, als @inye sagte: https://github.com/mkhairi/materialize-sass/issues/130. Die Verwendung von JS oder Kaffee macht keinen Unterschied, zumindest NICHT für mich. –
- 1. Fallback für Turbolinks 5.0 mit jQuery ready()
- 2. Wie eine Funktion innerhalb $ (document) nennen .ready
- 3. zweite $ (document) .ready Ereignis jQuery
- 4. JQuery $ (document) .ready() und document.write()
- 5. Rails turbolinks, zwei Fragen
- 6. JQuery $ (document) .ready ajax load
- 7. $ (document) .ready (function() VS $ (function() {
- 8. onYouTubeIframeAPIReady innerhalb jQuery (document) .ready
- 9. Wie bald wird jQuery (document) .ready aufgerufen?
- 10. Feuer $ (document) .ready nach AJAX Seite
- 11. Firefox wird nicht ausgelöst $ (document) .ready (function() {
- 12. JavaScript-Funktionen innerhalb (document) .ready() nicht
- 13. jQuery $ (document) .ready() nicht nach window.location.href Brennen
- 14. $ (document) .ready funktioniert nicht unter MVC4 Projekt
- 15. history.back(); löst $ (document) .ready() nicht aus;
- 16. Bootstrap mit Rails 5
- 17. rails 4 turbolinks multiple bindings
- 18. Prism.js arbeitet nicht mit Rails 4 Turbolinks
- 19. Turbolinks 5: Zeige Fortschritt Bar
- 20. Wie erreiche ich $ (document) .ready type Verhalten für AJAX-Inhalte?
- 21. Facebook Share-Taste nicht mit Rails Laden turbolinks
- 22. Having Problem mit Datentabellen möglicherweise wegen turbolinks
- 23. Wie können $ (document) .ready() Funktionen global verfügbar gemacht werden?
- 24. Wie wickeln wir mein Skript in einer $ (document) .ready (function() {
- 25. Rails 4 nicht ausführen $ (Dokument) .ready (bereit);
- 26. hinzufügen KO „data-bind“ -Attribut auf $ (document) .ready
- 27. Facebook kommentieren w/Rails 4 und Turbolinks
- 28. In jQuery, entspricht $ (func) $ (document) .ready (func)? Ist
- 29. $ (document) .ready() feuern, bevor die partielle Ansicht geladen wird
- 30. Problem, wenn ich legen Sie Javascript in $ (document) .ready
Ja. Auch hier erklärt. http://guides.rubyonrails.org/working_with_javascript_in_rails.html#turbolinks. Überprüfen Sie 5.2 Seite Ereignisse ändern. –
Turbolinks: Laden Brände für mich vor Ort, aber nicht auf Heroku. Ich sehe meinen benutzerdefinierten JavaScript-Code in meinen kompilierten JS-Assets, aber das Ereignis wird nicht ausgelöst. – psparrow
das funktioniert nicht gut. Ich habe eine select2 und wenn ich die Seite ändere und zurück habe ich zwei select2 (dupliziert) – inye