Selon les recommandations «JavaScript discrète», je souhaite séparer ma logique JavaScript en
Fichiers séparés. Cependant, je ne sais pas comment les organiser.
Devrais-je:
Chargez le JavaScript principal dans application.js à chaque fois. Créez maintenant des fichiers pour différents besoins. Créez un fichier form.js, un fichier myfancypart.js etc. Ne les chargez pas dans la mise en page 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 dans le bloc content_for sera chargé au rendement: javascript_includes.
Je suggère de mettre tout dans un fichier, que vous pouvez ensuite minify et gzip. Le client devra uniquement le télécharger une fois, puisqu'il sera mis en cache sur toutes les demandes ultérieures.
Une autre chose qui pourrait vous intéresser est les pignons, un gestionnaire de dépendance javascript, que vous pouvez installer en utilisant gem. Vous pouvez obtenir plus d'informations sur les pignons du site Web ( http://getsprockets.org/ ) ou de la page github ( http://wiki.github.com/sstephenson/sprockets ). Il rend l'écriture de grandes applications javascript beaucoup plus gérable.
Cela change avec Rails 3.1 et le pipeline d'actifs !!!
Les fichiers séparés sont les meilleurs comme vous l'indiquez. Les problèmes sur la façon de les référencer tous et de les relier disparaissent avec les rails 3.1 qui visent à les compiler tous en fichiers uniques pour la production.
On peut utiliser Jammit pour inclure les fichiers css et javascripts
Pour plus de détails: http://documentcloud.github.com/jammit/
Utilisation:
étape 1:
Ajouter js-files dans assets.yml (voir code ci-dessous)
Javascripts:
footer: - app/javascripts/lib/*.js - app/javascripts/jquery-plugins/*.js - app/javascripts/custom/*.js - app/javascripts/application.js
entê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 %>
Peut-être que vous voulez utiliser application_helper
def javascript(*files) content_for(:head) { javascript_include_tag(*files) } end def stylesheet(*files) content_for(:head) { stylesheet_link_tag(*files) } end