57 votes

Fichier JavaScript par vue dans Rails

Conformément aux recommandations de "JavaScript discret", je souhaite séparer ma logique JavaScript dans les éléments suivants
des fichiers séparés. Cependant, je ne sais pas comment les organiser.

Je devrais :

  1. Il suffit de placer tout le javascript de l'application dans le fichier Application.js et de le charger avec la page de mise en page ? C'est une approche simple mais je vais me retrouver avec un Application.js gonflé. Certains utilisateurs pourraient vouloir visiter seulement quelques pages, mais ce fichier entier serait préchargé, ce qui n'est pas bon.
  2. Ou dois-je créer un fichier javaScript distinct pour chaque vue et les charger indépendamment ? Cela crée une série de questions. Comment lier chaque fichier javaScript à la vue correspondante ?
    Merci.

117voto

Lennart Koopmann Points 4533

Chargez le JavaScript principal dans application.js à chaque fois. Maintenant, créez des fichiers pour différents besoins. Créez un fichier form.js, un fichier myfancypart.js, etc. Ne les chargez pas dans le layout application.html.erb. Chargez-les dynamiquement lorsque vous en avez besoin :

application.html.erb :

<%= javascript_include_tag "application" %>
<%= yield :javascript_includes %>

en haut de votre view.html.erb :

<% content_for :javascript_includes do %>
  <%= javascript_include_tag "forms.js" %>
<% end %>

Tout ce qui se trouve dans le bloc content_for sera chargé au rendement :javascript_includes.

11 votes

C'est très bien pour le développement, mais en production, vous voulez le moins de requêtes HTTP possible. Le chargement de tous vos fichiers js en une seule requête qui est mise en cache peut conduire à de meilleures performances.

3 votes

Rails3 corrige les problèmes avec le pipeline de biens pour la production.

3 votes

Ainsi, la réponse choisie ici est-elle conforme à ce modèle de pipeline d'actifs de Rails 3 ?

12voto

jonnii Points 17046

Je suggère de tout mettre dans un seul fichier, que vous pouvez ensuite minifier et gzip. Le client n'aura à le télécharger qu'une seule fois, car il sera mis en cache pour toutes les requêtes suivantes.

Une autre chose qui pourrait vous intéresser est sprockets, un gestionnaire de dépendances javascript, que vous pouvez installer en utilisant gem. Vous pouvez obtenir plus d'informations sur sprockets sur le site web ( http://getsprockets.org/ ) ou de la page github ( https://github.com/rails/sprockets ). Il rend l'écriture de grosses applications javascript beaucoup plus facile à gérer.

6voto

Michael Durrant Points 30342

Cela change avec Rails 3.1 et le pipeline d'actifs !!!

Comme vous l'indiquez, il est préférable d'avoir des fichiers séparés. Les problèmes liés à la façon de les référencer et de les lier disparaissent avec rails 3.1 qui vise à les compiler en un seul fichier pour la production.

2voto

Reality Points 535

On peut utiliser Jammit pour inclure les fichiers css et javascripts.

pour les détails : http://documentcloud.github.com/jammit/

Úsalo:

étape 1 :

Ajouter les fichiers js dans assets.yml (voir le code ci-dessous)

javascripts :

footer:

- app/javascripts/lib/*.js
- app/javascripts/jquery-plugins/*.js
- app/javascripts/custom/*.js
- app/javascripts/application.js

en-tête :

- app/javascripts/core/*.js
- app/javascripts/head/*.js

étape 2 :

Ajouter un code simple dans la mise en page de l'application :

<%= include_javascripts :header %>
<%= include_javascripts :footer %>

-1voto

dc10 Points 364

Vous voulez peut-être utiliser l'application_helper

def javascript(*files)
  content_for(:head) { javascript_include_tag(*files) }
end

def stylesheet(*files)
  content_for(:head) { stylesheet_link_tag(*files) }
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X