2010-09-25 5 views
3

Voici ce que j'essaie de faire correctement .... Lorsqu'un utilisateur se connecte et est redirigé vers la page de destination, je veux exécuter un peu de jquery ajax pour saisir et injecter du contenu.Rails 3 - y compris JavaScript sur une vue?

Je l'avais à l'origine dans mon fichier application.js mais le problème est que le code est là pour les utilisateurs qui ne sont pas connectés, ce qui signifie que je dois ajouter de la logique pour expliquer ce qui ne semble pas nettoyer. Qu'est-ce que je voudrais, c'est lorsque la vue est appelée pour pouvoir inclure JavaScript .... J'ai essayé de le coller dans le fichier de vue lui-même, mais cela a échoué parce qu'il est chargé avant JQUERY qui est au bas de la page ...

Comment les gourous de Rails 3 gèrent-ils cela? Merci!

Répondre

5

Eh bien, vous pouvez inclure le fichier jQuery en haut.

Si ce n'est pas une option, ajouter <%= yield :javascript %> dans la mise en page en dessous du jQuery comprennent, et à faire:

<% content_for :javascript do %> 
    <script type="text/javascript"> 
     // code goes here 
    </script> 
<% end %> 

Il sera placé dans l'emplacement approprié dans votre mise en page. (Cependant, je vous recommande, pour la mise en cache, d'écrire le Javascript dans un fichier externe et de l'inclure si nécessaire au lieu d'utiliser JavaScript en ligne, juste une bonne pratique.)

+0

C'est ce que je pensais ci-dessus, mais il semble très lourd. Comme les utilisateurs non-signés doivent télécharger tous ces trucs ... Et j'imagine que je construis une application pour que chaque vue ait des situations comme celle-ci ... Où puis-je stocker des vues JS spécifiques? – AnApprentice

+0

Je pense qu'il le fait déjà. Le problème est que le code ne fonctionnera pas sans jQuery, qui n'est pas chargé à ce stade. –

+0

@FRKT - Heh. Lolfail. Avait ajouté plus d'info la réponse; enlevé le premier bit, maintenant, car ce n'est plus pertinent. Merci :) – Matchu

1

Vous simplifierez la tâche vous-même si vous venez de charger jQuery plus tôt dans le document. Si vous le chargez à partir des API Google, il y a de fortes chances qu'il soit mis en cache dans le navigateur de votre client et que l'augmentation du temps de chargement de la page soit négligeable.

+0

Merci, mais disons que je voudrais charger jQuery dernier (style facebook) des options? – AnApprentice

+0

Mieux encore ,,, comment puis-je ajouter un fichier JS personnalisé pour une vue, et l'ajouter à la fin de la page, comme pour le lancer après le chargement jquery dans le fichier de mise en page de l'application? – AnApprentice

+0

@TheApprentice: Je pense que vous n'auriez pas de chance, à moins bien sûr que vous réécriviez votre code pour ne pas avoir besoin d'une bibliothèque qui n'est pas chargée. ;-) En outre, êtes-vous sûr que vous devriez faire cela? Pourquoi avez-vous besoin de charger ces données par JavaScript plutôt que de les rendre côté serveur? –

2

Chargez jQuery à partir de Google CDN et chargez votre vue JS spécifique après. Si vous vous inquiétez de la vitesse de la page de destination pour les utilisateurs non connectés, utilisez la page mise en cache.

Si vous voulez encore l'optimiser, utilisez un proxy inverse comme Sqiud. Vous pouvez également utiliser Jammit ou Asset Packager (http://synthesis.sbecker.net/pages/asset_packager) pour minimiser votre javascript et CSS. Un mot de conseil, vous devriez concentrer vos efforts de performance après avoir fini d'écrire votre application, il est facile de se laisser entraîner dans des problèmes de moindre importance qui entravent vos efforts de développement.

Questions connexes