Ces réponses m'ont beaucoup aidé ! Si quelqu'un veut en savoir un peu plus...
- Vous devez mettre les javascripts dans les manifestes si vous voulez qu'ils soient précompilés. Cependant, si vous exigez chaque fichier javascript de
application.js.coffee
alors tous les javacsripts seront chargés à chaque fois que vous naviguerez vers une autre page, et l'objectif de faire des javascripts spécifiques à une page sera vain.
Par conséquent, vous devez créer votre propre fichier manifeste (par ex. speciifc.js
) qui nécessitera tous les fichiers javascript spécifiques à la page. De plus, modifiez require_tree
de application.js
app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require_tree ./global
app/assets/javascripts/specific.js
//= require_tree ./specific
Alors dans votre environments/production.rb
ajouter ce manifeste à la liste précompilée avec l'option config,
config.assets.precompile += %w( specific.js )
C'est fait ! Tous les partagé les javascripts qui devraient toujours être chargés seront placés dans app/assets/javascripts/global
et les javascripts spécifiques à la page dans le dossier app/assets/javascripts/specific
. Vous pouvez simplement appeler les javascripts spécifiques à la page à partir de la vue, comme suit
<%= javascript_include_tag "specific/whatever.js" %>
//.js est facultatif.
C'est suffisant, mais je voulais faire une utilisation de javascript_include_tag params[:controller]
aussi. Lorsque vous créez des contrôleurs, un fichier coffeescript associé est généré en app/assets/javascripts
comme d'autres personnes l'ont mentionné. Il y a vraiment spécifique au contrôleur javascripts, qui ne sont chargés que lorsque l'utilisateur atteint la vue spécifique du contrôleur.
J'ai donc créé un autre manifeste controller-specific.js
app/assets/javascripts/controller-specific.js
//= require_directory .
Cela comprendra tous les coffeescripts générés automatiquement et associés aux contrôleurs. Vous devez également l'ajouter à la liste des éléments précompilés.
config.assets.precompile += %w( specific.js controller-specific.js )