2010-02-11 4 views
5

Dans les notes de version pour Rails 3.0 beta, il dit:Rails 3.0 beta & JS Helpers avec jQuery

"aides Unobtrusive JavaScript avec des pilotes pour Prototype, jQuery"

Alors, comment puis-je configurer Rails 3 pour utiliser jQuery alors? Il charge toujours toutes les bibliothèques Prototype par défaut.

Je pris cela signifie que Rails 3 a construit dans la fonctionnalité similaire au plugin jRails, mais peut-être que je suis malentendu :)

En outre, comme une question de bonus, si je suis en utilisant Prototype est-il un moyen obtenir Rails pour charger les versions minifiées, et encore mieux un seul fichier JS concaténé pour réduire les demandes http?

Merci.

Répondre

0

Je ne connais pas Rails 3, mais je vais essayer de répondre à la question bonus.

Vous pouvez mettre ce que vous voulez dans le répertoire public/javascript. Par défaut, il chargera les fichiers: prototype.js, effects.js, dragdrop.js et controls.js (read more). Si vous voulez compresser tous les fichiers js et les envoyer dans un seul fichier, vous pouvez utiliser plugin.

Bien sûr, cela ne fonctionnera pas pour les fichiers js générés dynamiquement.

+0

Ah pratique, merci :) – firecall

0

Je travaille aussi que d'essayer de convertir mes ajax avec des rails 3.

D'après ce que je peux dire, ils se sont déplacés à une structure qui ajoute une data-remote=true et quand vous ajoutez :remote => true à quelque chose comme link_to qui est censé remplacer link_to_remote dans les rails 3, donc il n'y a plus de méthodes onclick qui appelle les méthodes Ajax. Alors, comment fonctionne Ajax dans Rails 3, alors? Eh bien, vous êtes censé avoir des méthodes javascript qui surveillent lorsque vous cliquez sur des liens qui ont une propriété de data-remote=true et qui en font quelque chose, mais ne les incluez pas dans Rails (d'après ce que je peux dire), c'est agnostique pouvez écrire ces méthodes pour surveiller les clics dans le prototype, jquery, les écrire vous-même, ou tout ce qui est là-bas.

Je ne trouve javascript sur GitHub pour commencer que guetterez ces événements:

Dans prototype

Dans jQuery

Je pense que pour charger réellement jquery au lieu de prototype, vous Il va falloir simplement le télécharger en public/javascripts et spécifier manuellement jquery, utiliser javascript_include_tag :all, ou remplacer javascript_include_tag (non recommandé)

+0

Je me suis trompé à propos de Rails ne comprenant pas l'un des scripts UJS .. il est en public/javascripts/rails.js Je suppose que je l'ai manqué juste avant. –

1

JS discret ne fait pas référence aux méthodes PrototypeHelper, mais à des formulaires et des liens distants et autres. Le concept est que vous incluez :remote => true dans votre form_for ou toutes les méthodes auxiliaires le supportent, puis un pilote appelé rails.js va chercher ces télécommandes et intercepter les événements submit ou click et les envoyer via xhr.Pour utiliser jquery, il suffit de remplacer le pilote prototype ujs (livré avec des rails) par le pilote jquery ujs, qui a été extrait dans son propre repo peu avant la version bêta de rails 3. Vous pouvez le trouver here.

2

Lorsque vous créez un Rails 3 application, il suffit de passer le long de la -J ainsi param:

$ rails app_name -J 

Ce sautera y compris les bibliothèques de prototypes. Maintenant, tout ce que vous devez faire est de déposer le dernier fichier jquery.js dans le répertoire public/javascripts. Une fois que vous faites cela, vous aurez également besoin de la version jQuery du fichier rails.js. Vous pouvez obtenir ce ici:

http://github.com/rails/jquery-ujs/blob/master/src/rails.js

EDIT: Vous devez inclure ces fichiers dans le haut de vos mises en page pour obtenir la fonctionnalité. Vous pouvez le faire par:

<%= javascript_include_tag "jquery", "rails" %> 

Espérons que cela aide!

+0

Yup, c'est la réponse que je cherchais :) Merci. Je pense que je supposais qu'il y aurait une config pour cela, et aussi une config pour utiliser des versions minifiées à des fins de déploiement. On dirait que c'est la pratique standard et que Rails devrait faire comme standard. Pourquoi inclut-il un prototype non-minifié pour commencer! – firecall

+0

Vous pouvez utiliser mon plugin pour faire exactement cela: http://github.com/voxxit/assemblage –

1

Découvrez Google Closure

Il peut transformer plusieurs fichiers javascript dans un seul fichier compressé js. Il peut même déterminer les parties de la bibliothèque que vous n'utilisez pas et les supprimer également.

+0

Ouais, je savais à ce sujet. J'utilise déjà un workflow manuel qui exécute YUI Compressor puis CAT via un script shell. Mais je me demandais vraiment s'il y avait un moyen de Rails intégré ou quelque chose pour réduire les requêtes http. Il semble inutile d'inclure autant de versions non-minifiées que la valeur par défaut: / – firecall