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?
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%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.
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
:
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 <
maskiert werden.
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%Tags und Links javascript ruby-on-rails