Ich versuche Javascript auf bestimmten Seiten auszuführen und meine einzige Lösung scheint wie ein Anti-Pattern. Ich habe controller.js
in assets/javascripts/
generiert. Ich verwende gem 'jquery-turbolinks'
Ich habe Code ähnlich dem folgenden:
Dieser Code wird auf jeder Seite abgefeuert. Also habe ich folgendes hinzugefügt:
%Vor%Meine Frage ist, gibt es eine Möglichkeit, Schienen zu setzen, um nur die Javascript-Dateien zu verwenden, die für einen bestimmten Controller notwendig sind, oder ist Logik-Gating hinter einem Element die beste Lösung suchen?
Dies ist eine ziemlich schöne Turbolinks-spezifische Lösung:
%Vor%
Sie sollten beachten, dass Sie, wenn Sie Turbolinks verwenden, eine lang andauernde, persistente Sitzung mit einem beibehaltenen Status haben. Das heißt, wenn Sie Inline-Skript-Tags hinzufügen oder zusätzliche JavaScript-Dateien in Ihre Ansichten laden, bleiben sie im Speicher des Browsers.
Sie sollten daher alle seitenspezifischen Ereignisbehandlungsroutinen, die Sie in page:before-unload
erstellt haben, bereinigen.
Es gibt viele Möglichkeiten, dies zu tun. Ich werde eine beschreiben.
Ich benutze dieses alte Juwel , um alle meine .module.js
-Dateien in commonjs-Module einzubinden.
Ich habe dann einen Helfer, der etwas wie das folgende in ein <script>
-Tag im Kopf jeder HTML-Seite schreibt.
posts/create
wird aus einer vereinfachten Mischung des aktuellen Controllers und der Aktion generiert, die die Anforderung darstellt.
Ich habe dann in meinem dreadyready etwas für meine application.js
.
Schließlich werde ich eine Datei wie diese haben, die spezifisch für die /posts/create
URL ist.
app / assets / posts / create.module.js
%Vor%Tags und Links javascript jquery ruby-on-rails ruby-on-rails-4