Comme je l’ai mentionné dans mon précédent tutoriel Ruby on Rails, le JavaScript unobtrusif (UJS) est l’une des nouvelles fonctionnalités les plus intéressantes de Rails 3. UJS permet au code généré par Rails d’être beaucoup plus propre, de séparer votre logique JavaScript de vos dispositions HTML et de dissocier Rails de la bibliothèque JavaScript Prototype. Dans ce tutoriel, nous allons examiner ces fonctionnalités et apprendre à les utiliser dans une application simple Rails 3..
Pour commencer, en quoi consiste exactement UJS? Tout simplement, UJS est un JavaScript séparé de votre balise HTML. La façon la plus simple de décrire UJS est d'utiliser un exemple. Prenez un gestionnaire d’événements onclick; nous pourrions l'ajouter de manière intrusive:
Lien
Ou nous pourrions l'ajouter discrètement en attachant l'événement au lien (en utilisant jQuery dans cet exemple):
Lien
Comme mentionné dans mon introduction, cette deuxième méthode présente de nombreux avantages, notamment un débogage plus simple et un code plus propre..
"Rails 3, en revanche, est agnostique pour les frameworks JavaScript. En d'autres termes, vous pouvez utiliser votre framework JavaScript de choix, à condition qu'une implémentation de Rails UJS existe pour ce framework."
Jusqu'à la version 3, Ruby on Rails générait du JavaScript intrusif. Le code résultant n'était pas propre, mais pire encore, il était étroitement associé au framework JavaScript Prototype. Cela signifiait qu'à moins de créer un plugin ou de pirater Rails, il fallait utiliser la bibliothèque Prototype avec les méthodes d'assistance JavaScript de Rail..
Rails 3, en revanche, est agnostique dans le framework JavaScript. En d'autres termes, vous pouvez utiliser le framework JavaScript de votre choix, à condition qu'une implémentation Rails UJS existe pour ce framework. Les implémentations UJS actuelles incluent les suivantes:
Rails 3 implémente désormais toutes ses fonctionnalités de JavaScript Helper (soumissions AJAX, invites de confirmation, etc.) en ajoutant les attributs HTML 5 personnalisés suivants aux éléments HTML..
Par exemple, cette balise de lien
Détruire
enverrait une demande de suppression AJAX après avoir demandé à l'utilisateur "Êtes-vous sûr?"
Vous pouvez imaginer à quel point il serait difficile de lire si tout ce JavaScript était intégré.
Maintenant que nous avons examiné UJS et la manière dont Rails l'implémente, configurons un projet et examinons certaines applications spécifiques. Nous allons utiliser la bibliothèque jQuery et l'implémentation UJS dans ce tutoriel.
Comme nous créons un nouveau projet à partir de rien, la première chose à faire est de créer le projet en tapant ce qui suit:
rails nouveau blog --skip-prototype
Notez que je demande à Rails de sauter le fichier prototype JavaScript, car je vais utiliser la bibliothèque jQuery..
Commençons par le serveur pour nous assurer que tout semble fonctionner.
Et voila!
Maintenant que nous avons configuré notre projet, nous devons ajouter jQuery et le jQuery UJS à notre projet. Vous êtes libre d'organiser votre JavaScript comme bon vous semble, mais la convention Rails pour structurer vos fichiers JavaScript est la suivante (tous ces fichiers sont en public / javascripts):
Si vous ne l’avez pas déjà fait, téléchargez jquery.js (ou consultez un CDN) et rails.js et incluez-les dans votre public / javascripts
annuaire.
La dernière chose à faire pour être opérationnel est de dire à Rails d'inclure ces fichiers js sur chacune de nos pages. Pour ce faire, ouvrez application.rb dans votre répertoire de configuration et ajoutez la ligne suivante
config.action_view.JavaScript_expansions [: defaults] =% w (application jquery rails)
Cet élément de configuration indique à Rails d'inclure par défaut les trois fichiers JavaScript mentionnés ci-dessus..
Vous pouvez également extraire jQuery d’un CDN (http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js) en incluant manuellement une balise de script pointant vers le bon emplacement. Si vous faites cela, veillez à supprimer 'jquery' de l'élément de configuration JavaScript_expansions..
Pour démontrer la fonctionnalité des rails UJS, nous allons d’abord avoir du code avec lequel travailler. Pour cette démo, nous allons simplement avoir un simple objet Post. Générons cela maintenant
rails générer un échafaudage Nom du poste: titre de la chaîne: contenu de la chaîne: texte
Et puis migrons notre base de données pour créer la table des publications.
rake db: migrer
Ok, nous sommes prêts à partir! Si nous naviguons vers http: // localhost: 3000 / posts / new
, nous devrions voir un formulaire pour créer un nouveau poste.
Ok, tout fonctionne! Voyons maintenant comment utiliser les fonctionnalités UJS et AJAX intégrées à Rails..
Maintenant que tous les fichiers JavaScript requis sont inclus, nous pouvons réellement commencer à utiliser Rails 3 pour implémenter certaines fonctionnalités AJAX. Bien que vous puissiez écrire tout le code JavaScript personnalisé que vous souhaitez, Rails fournit quelques méthodes intégrées pratiques que vous pouvez utiliser pour effectuer facilement des appels AJAX et d'autres actions JavaScript..
Regardons quelques helpers de rails couramment utilisés et le JavaScript qu'ils génèrent
Si nous examinons notre formulaire de publication, nous constatons que chaque fois que nous créons ou modifions une publication, le formulaire est soumis manuellement, puis nous sommes redirigés vers une vue en lecture seule de cette publication. Et si nous voulions soumettre ce formulaire via AJAX au lieu d'utiliser une soumission manuelle?
Rails 3 facilite la conversion de tout formulaire en AJAX. Tout d’abord, ouvrez votre _form.html.erb
partiel dans app / views / posts et modifiez la première ligne de:
<%= form_for(@post) do |f| %>
à
<%= form_for(@post, :remote => true) do | f | %>
Avant Rails 3, ajouter : remote => true
aurait généré un tas de JavaScript en ligne à l'intérieur de la balise de formulaire, mais avec Rails 3 UJS, le seul changement est l'ajout d'un attribut personnalisé HTML 5. Peux tu le repérer?