Rails 3.1 asset pipeline: comment charger le contrôleur de scripts spécifiques?
Si je créer un nouveau contrôleur dans les Rails 3.1, également un fichier javascript avec le nom du contrôleur sera ajouté automatiquement. Tout d'abord, j'ai pensé que ce fichier javascript sera utilisée uniquement, que le contrôleur est appelé.
Par défaut, il est l'instruction //= require_tree .
dans le application.js
-fichier, qui incluent tous les fichier javascript sur son arbre.
Comment pourrais-je charger uniquement le contrôleur de script spécifique?
- Il peut ne pas être une bonne idée de le faire. Veuillez voir les réponses à cette question: " stackoverflow.com/questions/8250951/...
- Écrivez votre javascript, de sorte que c'est la page spécifique, puis ne vous inquiétez pas sur le fait que tout est de la purée de ensemble. Si c'était le code compilé, qu'est ce que vous souhaitez faire, non?
- Vue spécifique: stackoverflow.com/questions/6167805/...
Vous devez vous connecter pour publier un commentaire.
Pour charger uniquement le nécessaire name_of_the_js_file.js fichier:
supprimer la
//=require_tree
deapplication.js
garder votre fichier js (que vous voulez charger quand une page spécifique est chargé) dans l'asset pipeline
ajouter un accompagnateur en
application_helper.rb
rendement dans votre mise en page:
ajouter ceci dans votre fichier de vue:
Alors qu'il devrait être ok
config/application.rb
une ligne commeconfig.assets.precompile += %w(name_of_js_file.js)
ou vous pourriez obtenir précompiler des questions comme je l'ai fait. Voir aussi jalada.co.royaume-uni/2012/01/23/...<% if controller.action_name == "index" stylesheet 'contacts_index' javascript 'contacts_index' end %>
<% if controller.action_name == "index" then stylesheet 'contacts_index'; javascript 'contacts_index'; end %>
Une élégante solution pour cela est d'exiger nom_controller dans votre javascript_include_tag
voir http://apidock.com/rails/ActionController/Metal/controller_name/class
controller_name.js sera chargé et est à l'actif, de sorte que vous pouvez exiger d'autres fichiers à partir d'ici.
Exemple, le rendu des voitures#indice de donner
où cars.js peut contenir
Profitez-en !
controller_name.js
vous pouvez voir quelques précompiler les problèmes et les défauts de cache, surtout si vous n'avez pas explicitement précompiler chacun de ceux-ci.asset_path
retourne toujours un chemin, même si le fichier n'existe pasJ'ai toujours comporter à l'intérieur de mes fichiers de mise en page. Il permet à votre js à l'action
Votre problème peut être résolu de différentes manières.
Ajouter les actifs de façon dynamique
Veuillez considérer que ce n'est pas une bonne solution pour le mode de production, parce que votre contrôleur de détails ne seront pas précompilés!
Ajouter à notre application helper la méthode suivante:
Appeler la méthode d'assistance dans votre
layout
-fichier:Créer des actifs spécifiques pour vos actions de contrôleur. E. g.
controller_action.js
S'il vous plaît n'oubliez pas de changer
YourApp
le nom de votre application.Utilisation
yield
<%= yield :head%>
à votre disposition à la têteInclure votre actif de votre action:
Veuillez voir le Rails guides pour de plus amples informations.
J'aime albandiguer de la solution. Avec qui, j'ai trouvé que javascript/coffeescript actifs ne sont pas individuellement précompilés. Ce qui provoque toutes sortes d'erreurs en essayant d'utiliser
javascript_path
. Je vais partager ma solution à ce problème après j'adresse une question à quelques personnes mentionnées dans ses commentaires. Principalement de traiter avec une partie seulement de contrôleur nommé les fichiers JavaScript.Alors j'ai construit une demande d'aide pour détecter si le fichier existe dans le répertoire javascript, indépendamment de l' .coffee/.js extension:
Cette méthode retourne le chemin complet vers le fichier javascript si elle existe. Sinon, elle retourne nil. Donc, après Pencilcheck commentaire vous pouvez ajouter cette méthode pour un conditionnelles comprennent:
Et maintenant vous avez une bonne conditionnelle inclure. Maintenant, pour la question de la précompilés actifs. Généralement pour l'optimisation vous ne voulez pas actifs précompilés individuellement. Vous pouvez toutefois le faire si vous devez:
Vous pouvez ajouter ce faire, votre environnement de fichier de configuration. Testez-le dans votre environnement de développement du premier fichier. Encore une fois c'est mal conseillé. Les Rails asset pipeline utilise des Pignons pour optimiser tout:
VEUILLEZ LIRE la documentation pour plus de détails de la mécanique de Les pignons (Asset Pipeline) http://guides.rubyonrails.org/asset_pipeline.html
Actifs ne sont pas précompilés individuellement. Par exemple, lorsque j'essaie:
J'obtiens:
De sorte que vous pouvez inclure des actifs à être précompilés individuellement. Nous avons juste besoin d'augmenter le contrôleur nommé les fichiers javascript dans notre atout initialiseur. Eh bien, nous pouvons le faire par programmation.
Pour obtenir une liste de noms de contrôleur, je vais utiliser ecoologic l'exemple de:
Et maintenant pour obtenir le nom de tous les fichiers javascript qui correspondent le préfixe du nom du contrôleur, vous pouvez utiliser les éléments suivants:
Vous pouvez essayer:
Ainsi, vous obtenez une liste de tous les fichiers javascript, sans chemin d'accès du répertoire qui correspondent à vos nom du contrôleur. Remarque si votre contrôleur nom est au pluriel, le javascript nom doit être ainsi. Notez également si le contrôleur est singulier, et le fichier javascript est au pluriel, ce sera encore de l'inclure, car de
the_file[a_controller]
aboutissent sur une correspondance partielle.N'hésitez pas à essayer dans votre
Rails.application.config.assets.precompile
réglage. Je sais que cela vous fait de la liste de fichiers correctement. Mais je vais vous laisser pour le tester. Laissez-moi savoir si il y a des nuances impliqué avec la précompilation de cette façon que je suis curieux.Pour un très explication détaillée sur la manière dont les actifs précompiler voir ce blog: http://www.sitepoint.com/asset-precompile-works-part/
J'ai récemment découvert une approche simple pour utiliser les scripts générés pour contrôleur spécifique. J'utilise cette solution gem gon. Ajouter dans un contrôleur:
Après cela, ouvrez votre
homes.js.cofee
et d'ajouter en début de fichier:C'est tout.