Rails 4: coffeescript funktioniert nur bei einer Post-Anfrage oder wenn ich die Seite neu lade

8

Ich bin hauptsächlich ein Backend Entwickler und bin nicht so begabt in Javascript verwandten Sachen (und all die Galaxie von Frameworks, die auf dem Platz existiert). Ich weiß, das ist schlecht, aber es ist was es ist.

ich bin verrückt nach dem Problem, das ich habe und ich vermisse wahrscheinlich etwas sehr einfaches. Ich habe einige Nachforschungen angestellt (Google + die Stack-Überlauf-Bibel) und habe keinen Fall gefunden, der dem Problem ähnlich ist, das ich habe. Ich nehme an, ich weiß einfach nicht, was ich mache. lass es mich erklären.

Was passiert

?

Ich benutze Rails 4 für ein kleines (nutzloses) Projekt und versuche in den coffeescript-Dateien etwas Javascript "code" zu schreiben.

anscheinend funktioniert der coffeescript "code", den ich geschrieben habe, nur, wenn ich eine Seite neu lade, oder nach einer POST -Anfrage (wenn Sie zum Beispiel ein Formular abschicken). Bei GET -Anfragen passiert beispielsweise während der Navigation von Seite zu Seite nichts.

Ich habe es mit einem sehr einfachen grundlegenden elementaren 101 Test versucht: Anzeige einer Warnmeldung (Hallo!) auf einer Seite (Es begann mit der Aufnahme einer Datumsauswahl).

Nehmen wir an, ich habe ein Article -Modell und ein zugeordnetes ArticlesController zum Bearbeiten / Erstellen / Löschen von Daten. Ich habe folgende Dateien:

%Vor%

Ich füge nur eine Zeile in app/assets/javascripts/articles.js.coffee hinzu:

%Vor%

Wenn ich ein Formular abschicke oder eine Seite neu lade, sehe ich die Warnung "Hallo!". Wenn ich nur auf einen Link klicke, um zum Beispiel einen Artikel zu bearbeiten, passiert nichts.

Die Protokolle

Wenn ich mir die Rails-Logs in den beiden Fällen ansehe, habe ich zwei verschiedene Szenarien:

In dem Fall "es funktioniert nicht", wenn ich eine einfache get Anfrage (durch Klicken auf den Link Bearbeiten) mache, habe ich dies in den Protokollen:

%Vor%

Im Fall "es funktioniert", wenn ich zum Beispiel die gleiche Bearbeitungsseite erneut lade, wird alles neu geladen.

%Vor%

Was ich versucht habe

Ich habe versucht, die js-Dateien mit

zu generieren %Vor%

aber es war das gleiche.

Ich habe versucht, einige Edelsteine ​​wie Therubyracer, Barista zu installieren, es war das gleiche.

Fehle ich etwas sehr Grundlegendes? Sollte ich ein Buch über die Grundlagen von Javascript lesen? Soll ich in Alaska abgeschoben werden, weil ich etwas sehr leicht verstehe? Sollte ich in Rente gehen oder den Beruf wechseln?

Danke für die Hilfe. Ich sinke in Depressionen.

    
d34n5 18.09.2013, 17:20
quelle

2 Antworten

11

Es ist wegen der Turbolinks Juwel. Wenn Sie auf einen Link klicken, lädt der Browser die Seite nicht wirklich neu, sondern führt lediglich eine AJAX-Anfrage aus und ändert den Titel und den Textkörper, wobei alles andere unverändert bleibt. Wenn du das umgehen willst, kannst du entweder turbolinks aus deiner application.js Datei löschen oder jquery-turbolinks gem installieren und //= require jquery.turbolinks setzen, nachdem du jquery oder jquery ui benötigt hast.

Und ich empfehle auch, $ -> oder $(document).ready -> (was in den meisten Fällen ziemlich dasselbe ist) in Ihrem Coffesript zu verwenden.

    
Almaron 18.09.2013, 17:25
quelle
2

Dies ist ein Problem aufgrund von turbolinks : Ihre JavaScript-Datei wird nur einmal (beim Laden der Seite) ausgewertet.

Um zu erzwingen, dass Ihr Code bei Änderung der Seite erneut ausgewertet wird, fügen Sie einen Ereignis-Listener zum Ereignis page:load hinzu:

%Vor%     
Damien 18.09.2013 17:24
quelle