- 1
[Opened] appeler jelix_datepicker_default() en asynchrone depuis une commande eval()
Posted by lebourja on 04/18/2009 07:27
Bonjour,
j'ai une petite question, pas vraiment jelix mais plus jquery je pense, quoique en lien avec ajax, jsonrpc et datepicker et je me dis que j'aurais peut-être la réponse sur ce forum.
Je me suis fait un controller (et le javascript) permettant de gérer les pages en zones asynchrones basé sur des requêtes jsonrpc demandant les actions à réaliser. Les actions peuvent être du script à exécuter(eval, nouvelle balise,...) ou de changer le code html d'une balise (code du html fourni ou url d'un htmlfragment à insérer...).
Sur ce principe je me suis fait un gestionnaire de DAOCrud asynchrone basé sur deux contrôler: un controller jsonrpc étendant celui décrit ci-dessus et un ajax étendant ControllerDAOCrud.
Bon voilà pour l'intro.
j'ai rencontré quelques soucis de javascript que j'ai finalement contourné. Mais pour cela j'ai du (euh, entre autre) modifier datepicker.js car il utilise this alors que mon javascript était exécuté par une commande eval() en asynchrone à l'extérieur de la balise form. Le bout de javascript dont il s'agit est celui généré par ControllerDAOCrud:
c = new jFormsJQControlDate('creation', 'Creation');c.help='cool un
aide pour le format de la date format aaaa-mm-jj';c.errInvalid='Le format de la date de cr\u00e9ation \u00e0 respecter pour la saisie test aaaa-mm-jj';jelix_datepicker_default
(c,'fr_FR','\/quidnovi\/');
Mon problème en résumé est donc que j'appele jelix_datepicker_default() depuis une commande eval() exécuter à l'extérieur du formulaire. Ma question est: connaissez-vous une façon simple de faire avec jquery pour que ce code javascript s'exécute à l'intérieur de la balise form (que je peux facilement récupérer par son id)?
merci pour les courageux qui aurait une réponse ;-)
jack.
[Opened] Re: appeler jelix_datepicker_default() en asynchrone depuis une commande eval()
Posted by lebourja on 04/19/2009 12:32
J'ai trouvé le réel pb et du coup une solution.
Le soucis ne venait pas du fait que la méthode jelix_datepicker_XXX() était appelé à l'extérieur de la form mais du fait qu'elle utilise control.formName sur chacun des contrôle dans sa méthode _start(). Dans une page statique, la méthode start est appelée après chargement de la page quand les contrôles ont déjà été initialisés et du coup le paramètre formName a bien été initialisé par jFormsJQ. Mais dans une page dynamique, _start() est appelée aussitôt alors que le contrôle n'a pas encore été initialisé par jFormsJQ et control.formName est nul.
La solution que j'ai mis en place est d'ajouter dans mon plugin jform une ligne dans le script généré avant d'appeler la méthode jelix_datepicker_XXX(): "c.formName='".$this->_name.";"
et ça marche... ouf!
je l'ai fait dans un str_replace car mon objectif est de ne pas toucher au code de jelix et de réécrire un minimum pour éviter les copier/coller/modifier qui désynchronise mon code avec la version courante de jelix. Mais pensez vous qu'il y ait matière à demander une demande d'évolution?
jacques
ps: entre temps j'ai regardé jquery et ai trouvé une réponse partielle à ma question intiale pour simuler que mon code s'exécute dans le formulaire (this pointant sur le formulaire), il suffit d'encapsuler mon javascript dans une expression jquery $(monformulaire).each(function(){monscript}: "$(\"#".$this->getName()."\").each(function(){".$this->jsContent."});" y avait qu'à lire la doc, as usual (please read the fucking user guide!).
- 1