2 Stimmen

Das jQuery-Ready-Event wird nicht ausgelöst, wenn es im HEAD in Rails platziert ist.

Ich bemerke etwas Seltsames, wenn ich das jQuery-Ready-Event in Rails verwende. Wenn das Handler im Abschnitt hinzugefügt wird, entweder direkt innerhalb von Skript-Tags oder in Asset-Pipeline-Dateien, die mit <%= javascript_include_tag ... eingebunden sind, wird es nur beim ersten Seitenaufruf ausgeführt und nicht bei nachfolgenden Aufrufen. Das heißt, explizite Browseraktionen zum Laden/Aktualisieren einer Seite führen es aus, neue Seitenansichten, die durch Klicken auf Links ausgelöst werden, jedoch nicht.

Andererseits, wenn es im enthalten ist, wird es jedes Mal bei jeder Seitenansicht ausgeführt - wie man es erwarten würde.

jQuery(document).ready(function(){
    console.log('Bereit im Kopf'); // Wird nur beim ersten Seitenaufruf ausgeführt
});

jQuery(document).ready(function(){
    console.log('Bereit im Körper'); // Wird jedes Mal ausgeführt
});

Wirklich verwirrt. Ich sehe es in all meinen Rails-Apps, aber verstehe nicht, wie Rails dies beeinflussen könnte, da jQuery eine clientseitige Technologie ist??

3voto

Dom Day Punkte 2532

Von RailsApps Projekt :

Der Rails-Asset-Pipeline wird in Rails 4.0 noch wichtiger, da es das neue Turbolinks-Feature gibt. Turbolinks verbessert die Leistung, indem es die aktuelle Seiteninstanz am Leben erhält und nur den Seitenkörper (zusammen mit dem Titel im HEAD) ersetzt. Solange das HEAD-Element zwischen den Seiten identisch ist, kann der Turbolinks-Mechanismus seinen "Turbo"-Geschwindigkeitsschub liefern. Dies unterstreicht die Bedeutung, auf spezifischen Seiten keine zusätzlichen Skripttags zu verwenden.

1voto

Toiletduck Punkte 171

Die Verwendung von AJAX (oder Turbolinks), wie du gesagt hast, lädt tatsächlich keine neue Seite, sondern fügt sie in den DOM ein. Daher würde das bereite Ereignis nicht ausgelöst werden. :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X