Ruby on Rails - Senden Sie eine JavaScript-Variable vom Controller an die externe Javascript-Asset-Datei

8

Ich erstelle eine Website in Ruby on Rails. Ich habe eine Controller-Aktion, die eine Ansicht wie folgt rendert:

%Vor%

Das ist in Ordnung, da es die show.html.erb nach Belieben rendert. Ich möchte jedoch time_left irgendwie als JavaScript-Variable an die Ansicht übergeben, da dieser Wert von einem Countdown-JQuery-Plugin verwendet wird.

Ich könnte einen JavaScript-Block auf der HTML-Seite platzieren und eine Instanzvariable wie folgt ausgeben:

%Vor%

Aber ich würde gerne alle meine JS in einer externen Datei behalten und von der Seite könnte jemand einen Rat geben, wie man das implementiert?

    
RailsSon 27.04.2010, 14:09
quelle

2 Antworten

7

Ja, das kannst du!

Schreiben Sie Ihren JS-Code mit einem Argument (Timelimit) in Funktion und fügen Sie ihn in eine externe Datei ein. Dann können Sie die Funktion aus der Ansicht aufrufen und diese Variable @timeleft als JS-Funktionsargument übergeben.

Kurzes Beispiel:

%Vor%

.

%Vor%

.

%Vor%

javascript_tag

Beispiel nicht getestet, es ist nur eine Idee, keine vollständige Lösung. Vergessen Sie nicht, diese JS-Datei zu laden. Sie können andere JS-Hilfslinien javascript_include_tag verwenden.

    
retro 27.04.2010, 14:16
quelle
4

Die Retro-Technik der Verwendung eines Funktionsparameters ist eine Möglichkeit, aber Sie müssen die Variable, die Sie übergeben, entweder mit escape_javascript oder mit json + html_safe ordnungsgemäß umgehen.

Da Sie jedoch externe Dateien beeinflussen möchten, verwenden Sie am besten gon . Eine weitere gute Möglichkeit ist die Verwendung von Datenattributen .

gon

Gem spezialisiert auf den Job: Ссылка

Wahrscheinlich die robusteste Lösung.

Gemfile:

%Vor%

Controller:

%Vor%

Layout app/views/layouts/application.html.erb :

%Vor%

Asset-Datei:

%Vor%

Datenattribute

Fügen Sie Werten zu Attributen hinzu, rufen Sie sie mit JavaScript-DOM-Operationen ab.

Wird manchmal als "unaufdringliches Javascript" bezeichnet.

Kopf anzeigen:

%Vor%

Körper anzeigen:

%Vor%

Asset-Datei:

%Vor%

Im Folgenden wird veranschaulicht, wie Sie escape_javascript und to_json zusätzlich zur Retro-Antwort verwenden können.

escape_javascript

Alias: j .

Funktioniert nur für Strings.

Maskiert Zeichen, die in JavaScript-Strings eine besondere Bedeutung haben können, wie Backslash Escapes, in ein Format, das geeignet ist, innerhalb von String-Literal-Zitaten in JavaScript zu schreiben.

Behält html_safe Status der Eingabe bei, so braucht html_safe , ansonsten würden spezielle HTML-Zeichen wie < in &lt; maskiert werden.

%Vor%

to_json + html_safe

Funktioniert, weil JSON fast eine Teilmenge der JavaScript-Objekt-Literalnotation ist.

Funktioniert nicht nur auf Hash-Objekte, sondern auch auf Strings, Arrays und ganzen Zahlen konvertiert in JSON-Fragmente des entsprechenden Datentyps.

%Vor%     
quelle

Tags und Links