Les nouveaux rails 3.1 Pipeline d'actifs est vraiment sympa, mais comme tous les fichiers CoffeScript (ou JavaScript) sont mélangés dans un seul fichier inclus dans chaque page, il soulève cette question: P>
Comment puis-je limiter l'exécution de mon script à un contrôleur ou à une action particulière? Existe-t-il un moyen de savoir quel contrôleur et quel action a été utilisé lors de la demande afin que je puisse mettre des déclarations conditionnelles dans mon script? P>
Ou suis-je en train de m'approcher de la mauvaise solution? P>
5 Réponses :
Pourquoi ne pas mettre le JavaScript pour le contrôleur particulier comme une vue sur ce contrôleur (comme ils correspondent là-bas si sont S'ils sont General Enauner, vous pouvez marquer votre vue avec des classes, des identifiants ou des données (HTML5) et de rechercher votre recherche JavaScript (afin que vous puissiez réutiliser votre code). P>
C'est une bonne question, et cela m'aide à comprendre mon vrai problème. Ce que je suis vraiment après, c'est l'utilisation de Coffeescript, et je crois comprendre que cela n'est disponible que (automatiquement) via le pipeline d'actifs. En d'autres termes, j'aimerais que j'aimerais du café pour un contrôleur / action très spécifique, mais la seule façon de savoir comment utiliser Coffeescript est via le pipeline d'actif qui inclura le script pour chaque page.
Trevor Burnham répond bien à cette question ici: Comment associer un fichier CoffeScript avec une vue? P>
Il dit: p>
Il y a deux approches communes: p>
Comportement conditionnel sur la présence d'un élément particulier. Pour exemple, code pour exécuter une feuille d'inscription devrait être préféré avec quelque chose comme p>
si $ ('# inscrivez-vous'). Longueur> 0 CODE> P> LI>
Comportement conditionnel sur une classe sur le corps code> élément code>. Vous pouvez Définissez la classe de carrosserie en utilisant ERB. C'est souvent souhaitable pour les feuilles de style comme bien. Le code serait quelque chose comme p>
si $ («corps»). Hasclass 'utilisateur' code> p> li> ol> blockQuote>
Et si vous êtes intéressé par Coffeescript, Trevor travaille sur un livre qui semble être très bon: http://pragprog.com/titles/tbcoffee/coffeescript p>
Pour la solution 2, vous pouvez essayer GITUB.COM/TONYTONYJAN/GISTYLE qui définit les conventions à utiliser.
Ce que je fais normalement est d'avoir un rendement: JS sous les Javascripts de ma mise en page et lorsque j'ai besoin d'un script spécifique, je le chargez directement de ma vue avec:
content_for :js do javascript_include_tag "myscript" end
Un moyen de restreindre Coffeescript à une vue donnée consiste à créer un fichier de pivots personnalisés pour le JavaScript en question, similaire au format à Application.js. Dis que vous l'appelez extras.js. P>
// = nécessite my_code.js.coffee p> blockQuote>
Puis utilisez
javascript_include_tag "extras" code> pour inclure ce code dans les vues que vous souhaitez, soit en effectuant une mise en page personnalisée pour ces vues, soit à l'aide de contenu_for () P>
BTW, votre question indiquait que le pipeline Rails vous oblige à mettre tous vos actifs JS dans un seul fichier. Ce n'est pas vrai. C'est efficacement efficace pour éviter plusieurs voyages ronds, mais vous pouvez avoir plusieurs fichiers de pignon. P>
Si vous utilisez le mettre un drapeau pour chaque action dans le contrôleur: p> dans le script de café corrélateur Utilisez ces drapeaux pour districher entre les deux actions: < / p>
Dupliqué possible de Stackoverflow .com / questions / 6133235 / ... ; voir ma réponse là-bas.
Merci Trevor; Rendre le script conditionné sur la présence d'un élément ou d'une classe CSS particulière sur l'étiquette du corps semble être une bonne approche.