LÃ tu viens de rencontrer un truc que je n’aime pas trop dans Rails : le
fait de ne pas savoir que tu faisais de l’AJAX, avec prototype /
scriptaculous “masqué” par du ruby.
Prototype est la library javascript de base qu’utilise Rails.
Scriptaculous
est une surcouche de prototype qui fait de l’animation à l’écran, inclu
de
base aussi dans Rails. Prototype utilise pour sélectionner un élément de
ta
page (et lui ajouter des possibilités) par son id la méthode $(). Or,
jQuery utilise aussi la méthode $(), mais pour faire beaucoup plus
(sélectionner une liste d’élément par sélecteur css, liste que tu peux
manipuler à la volée avec des itérateurs ; transformer un tableau ou un
hash
javascript simple [], ou {} en un itérateur jQuery, renvoyer une
version
étendue du document, etc.). Donc quand tu charge les deux libraries, tu
as
un conflit, la dernière décidant de ce que l’on fait de la méthode
$().
Heureusement, les braves gens de jQuery ont prévu le et assoupli le
fonctionnement pour être compatible :
http://docs.jquery.com/Using_jQuery_with_Other_Libraries
Sinon, je t’encourage à voir ce qu’a réellement généré le code Rhtml :
<%= observe_form :new_personne,
:url => { :action => ‘doublon’ },
:frequency => 2,
:update => ‘doublon’
%>
Tu vas t’apercevoir qu’en fait c’est du JavaScript prototype, écrit
directement dans la page. Personnellement je trouve ça moche, du
javascript
dans du code HTML (philosophie Rails : on ne doit pas taper son
javascript
soi-même, c’est le boulot du rjs, un seul langage => ruby), je préfère
des
fichiers javascript .js à côté qui manipulent la page pour faire le
boulot
(philosohpie jQuery : pour bien dégrader une application, il faut
qu’elle ne
repose pas sur du javascript et des “hacks” html mais plutôt sur un code
html simple et propre, et le JavaScript doit être dans son fichier, et
faire
le boulot pour ajouter les éléments d’interface dont il a besoin).
Chaque
philosophie à ses avantages / inconvénients :
- Rails
- Avantages
- intégré dans Rails “de base”
- remote_form_for, link_to_remote sont séduisants
- Inconvénients
- incite à oublier le JavaScript, donc te laisse dépourvu le
jour
où tu veux faire quelque chose de différent de ce qui est
possible en RJS
- incite à faire des vues avec du code JavaScript, ce qui n’est
pas
bon pour la réutilisation (la vue cible ne “connaît” pas le
contexte de la
source, les scripts de réaction à la réception de la cible
sont bien mieux
placés dans le contexte de la source)
- verbeux
- un poil plus lent que jQuery (ça se sent surtout si tu ne
fais
pas de bubbling avec des longues listes, ou si tu fais
beaucoup d’animations
compliquées)
- jQuery + ce que tu veux côté serveur (dont Rails)
- Avantages
- rend les manipulations de la dom “magiquement facile” Ã
condition
de maîtriser les sélecteurs CSS
- élégant et peu verbeux
- incite à concevoir des interfaces qui “dégradent” bien
(marchent
sans JavaScript, même si c’est moins pratique, ça fait plaisir
à des
configurations sans JS)
- incite à mieux comprendre et connaître le HTML propre et les
CSS
- Inconvénients
- pas inclu “de base” dans Rails (mais facile à installer)
- complique un peu si tu veux faire du rjs (mais c’est limite
pas
propre)
Voilà , j’espère que ça t’aidera à faire ton choix et à avancer. Si tu
veux
d’autres tips jQuery, n’hésite pas à demander, mais ça ne t’exempte pas
de
lire la doc…
Michel B.
2009/7/12 Adrien C. removed_email_address@domain.invalid