2016-04-14 12 views
2

Ich habe einen interaktiven Header für meine Website in /views/layouts/_header.html.haml.Wie schließe ich benutzerdefiniertes JavaScript auf/für eine einzelne Seite in Rails ein?

Ich möchte alle JavaScript für den Header in einer einzigen Datei gesammelt werden. Am wichtigsten ist, dass ich Twitter Typeahead und Bloodhound für ein Suchfeld mit automatischem Vorschlag verwende. Ein Großteil dieses JavaScript muss ausgeführt werden, nachdem der Header gerendert wurde. Daher funktioniert seine Einbindung in application.js (die auf meiner Seite in application.html.haml enthalten ist) nicht, da dies vor der Wiedergabe des Headers ausgeführt wird.

Ich habe search-bar.js unter/assets/javascripts/hinzugefügt, die alle JS enthält, die ich auf dieser Seite ausführen muss.

Am unteren Rand meiner _header.html.haml habe ich nur mit einem regulären Skript-Tag verknüpft.

Das funktioniert gut lokal, aber auf meinem Dev-Server bekomme ich einen 404 für dieses Asset. Wird die statische Datei möglicherweise aus Performance-Gründen gelöscht? Selbst wenn es funktioniert, wenn es in der Asset-Pipeline enthalten ist, wird das Skript nicht zweimal geladen (einmal als einzelnes Skript und einmal in application.js)?

Ich habe den Eindruck, dass dies nicht der beste Weg ist, das JavaScript eines Teils in eine eigene Datei zu isolieren. Was ist der beste und am meisten "raily" Weg, um sicherzustellen, dass das Skript einmal geladen wird, nachdem _header gerendert und innerhalb seiner eigenen JavaScript-Datei isoliert wurde?

EDIT: Könnte dies vielleicht so einfach sein wie die folgenden Zeilen an den unteren Rand meiner Fußzeile teilweise verschieben? Wird dies in Rails als gute Praxis angesehen?

#{ stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true } 
#{ javascript_include_tag 'application', 'data-turbolinks-track' => true } 
+0

war meine Antwort hilfreich für Sie? –

Antwort

1

können Sie verwenden javascript_include_tag auf Skripte andere als application.js. Stellen Sie zuerst sicher, dass sich Ihr Skript in app/assets/javascripts Ordner befindet: app/assets/javascripts/movie-search-bar.js.

Dann nutzen Sie die javascript_include_tag Helfer in Ihrer Ansicht:

javascript_include_tag 'movie-search-bar' 

Und sagen Rails dass Asset vorzukompilieren.

config.assets.precompile << "movie-search-bar.js" 
0

Nun, ich habe diese Aufgabe erledigt .Wenn Sie eine bestimmte Javascript in Ihrer Ansicht aufnehmen mögen einen Ordner in Ihren Ansichten .Für Beispiel page_js Ordner .First erstellen und dann einige Teile wie _file.html.erb erstellen. Und platzieren Sie Ihr Javascript hinein. Und dann rendern Sie diese Datei, wo immer Sie wollen. So funktioniert Ihr Javascript nur für diese bestimmte Seite. Wenn es nicht funktioniert, dann sag es mir.