« Return to Thread: Formulaire en popup ??

Re: Formulaire en popup ??

by Michel Belleville :: Rate this Message:

Reply to Author | View in Thread

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 :
  1. 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)
  2. 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 Belleville


2009/7/12 Adrien Coquio <adrien.coquio@...>

D'accord, je vais me mettre à JQuery, ca a l'air très intéressant !
surtout avec la librairie UI !
Par contre je rencontre maintenant mon premier problème, j'avais une
requete ajax qui surveillait un formulaire mais depuis que j'ai
installé jquery, elle ne marche plus :

<%= observe_form :new_personne,
                :url => { :action => 'doublon' },
                :frequency => 2,
                :update => 'doublon'
%>

Et selon le résultat de l'action "doublon" j'affichais, ou pas, le div
suivant :

<div id="doublon" style="background:yellow">
<%= render :partial => 'list_doublon' %>
</div>

Une idée ?

Merci

Adrien

On Jul 11, 9:59 pm, Michel Belleville <michel.bellevi...@...>
wrote:
> http://jquery.com/pour jQuery, ce n'est intégré dans Rails (mais c'est
> intégrable, sans grave problèmes) perso je te le recommande, si tu n'as
> aucune expérience de JavaScript
>
> Sinon, dans rails de base, tu as prototype / scriptaculous qui peut faire
> les mêmes choses (mais en moins joli, en moins bien à mon sens).
>
> Comme tu dois tout prendre le JS depuis le début, commence par jQuery, à mon
> sens c'est l'avenir.
>
> Sinon, pour les conseils pour débuter, n'hésite pas à demander, la JS c'est
> mon dada.
>
> Michel Belleville
>
> 2009/7/11 Adrien Coquio <adrien.coq...@...>
>
>
>
> > C'est exactement ca que je veux faire, malheuresement je ne maitrise
> > pas le javascript ! Quelqu'un peut-il m'indiquer de la documentation
> > ( même en anglais ) pour réaliser ca, malgrè mes recherches je ne
> > trouve pas grand chose :S
> > Merci pour votre réponse
> > Adrien
>
> > On Jul 9, 2:18 pm, Michel Belleville <michel.bellevi...@...>
> > wrote:
> > > Avec un bon framework JavaScript (jQuery) il y a des plugins tout fait,
> > mais
> > > en gros ils marchent tous comme ça :
>
> > >    1. créer un élément html (div c'est bien) à la racine de ton document
> > >       - le positionner en "absolute" en haut à gauche du doc
> > >       - lui donner un z-index css plus haut que tout le monde dans le doc
> > >       - lui mettre un fond noir et lui donner de la transparence (cf. ton
> > >       framework JS)
> > >       - lui donner un waiter gif animé qui signifie que tu charge et
> > qu'il
> > >       faut que l'utilisateur patiente
> > >    2. faire un call ajax pour récupérer juste ton formulaire (pas de
> > layout)
> > >    - le coller à l'arrivée dans ton nouvel élément
> > >       - lui coller l'action ajax pour créer le nouvel élément en submit
>
> > > Si tu maîtrise bien les CSS et le javascript, c'est trivial. Sinon, il y
> > a
> > > souvent des plugins tout prêts pour ton framework JS (enfin, en jQuery
> > you
> > > il y en a).
>
> > > Michel Belleville
>
> > > 2009/7/9 Adrien Coquio <adrien.coq...@...>
>
> > > > Bonjour,
>
> > > > J'ai le dilemne suivant :
>
> > > > J'ai un formulaire "nouvelle personne", dans ce formulaire on doit
> > > > choisir la commune de cette personne ( lien vers la table COMMUNES)
> > > > via un select contenant le nom de toutes les communes de la base
> > > > Je voudrai offrir à l'utilisateur de créer cette commune si elle
> > > > n'existe pas, je pourrai mettre un div caché et le faire apparaitre en
> > > > ajax avec un lien "ajouter une commune" mais le formulaire pour
> > > > ajouter une commune est grand alors ca va vite devenir moche...
> > > > J'aimerai plutôt qu'une fenetre s'ouvre avec le formulaire et que
> > > > lorsque l'utilisateur valide le formulaire, la fenetre se ferme, et la
> > > > nouvelle commune soit sélectionné dans le select du formulaire
> > > > personne.
>
> > > > Ma question : comment faire ca ? Je pensai à lightwindow mais je n'ai
> > > > pas trouvé beaucoup de documentation pour faire ca avec rails et ca à
> > > > l'air buggé (pas d'autocomplétion). Une fenêtre popup ? Ca peut être
> > > > bien mais c'est un peu moche maintenant les popup avec le web 2.0,
> > > > non ? Une autre idée ? Des avis ?
>
> > > > Merci à tous
> > > > adrien



--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse railsfrance@...
Pour résilier votre abonnement envoyez un e-mail à l'adresse railsfrance-unsubscribe@...
-~----------~----~----~----~------~----~------~--~---

 « Return to Thread: Formulaire en popup ??