|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Bonjour,
Je dois être une des rares grandes débutantes en Dojo à oser poser ma question ici : Je fais un formulaire où quand la personne clique n phases, doit se développer dans la zone de formulaires n sous-formulaires, du type OBJET MACHIN phase 1 Intitulé Début Fin Application liée Url de l'application liée phase 2 Intitulé Début Fin Application liée Url de l'application liée Vous voyez le genre ? Pour ce, il me faut pour les champs début et fin créer dynamiquement des dijit.form.dateTextBox. J'ai bien songé à faire une recherche du type "dijit.form.dateTextBox programmatic" mais je n'ai pas su trouver ce qui correspond à mon besoin dans la doc Dojo... C'est mon premier widget Dojo, (que je suis parvenue à créer en mode "declarative"), merci de votre indulgence. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Inscription : mars 2008 Messages : 2 690 ![]() |
Bonjour et bienvenue sur le forum Dojo.
Dans la doc officielle, si vous suivez le chemin dijit -> from -> DateTextBox, vous obtenez des bouts de codes et des indications. Par exemple, vous devez préciser cette instruction en début de fichier js : Code :
dojo.require("dijit.form.DateTextBox"); Code :
var foo = new dijit.form.DateTextBox(/* Object */ args); Code :
new dijit.form.DateTextBox({value: new Date(2009, 0, 20)}) Code html :
<input dojotype='dijit.form.DateTextBox' value='2009-01-20'>
|
|
|
00
|
|
|
#3 | ||
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Merci Vermine,
J'essaie d'appliquer, mais je dois encore rater des choses : Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() Gibot DanielInscription : janvier 2010 Messages : 314 ![]() |
Bonjour et bienvenue,
Avez-vous un message d'erreur lorsque ce script est exécuté ? Avez vous ajouté le parseOnLoad lors du chargement de la bibliothèque dojo ? |
|
|
00
|
|
|
#5 | ||
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Bonjour,
Cette fois, cela fonctionne, en ajoutant le second paramètre (du noeud). Mais le problème, c'est que je veux d'abord faire le appendChild du label, puis du champ date (debut) puis du saut de ligne. Je sais, tout ça n'est pas élégant... Avec le code ci-dessous, il zappe le label... et j'ai enfin mon champ date, mais en premier dans le divPhases, alors que je le voulais en second... Code :
|
||
|
|
00
|
|
|
#6 | |||
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#7 | |
|
Membre éprouvé
![]() Gibot DanielInscription : janvier 2010 Messages : 314 ![]() |
Citation:
La règle des objets Dojo c'est "un objet html pour un objet dojo". Donc avec un div principal qui contient un div pour labDebut, un div pour la dateBox et un div pour br3 ça devrait passer... PS : En rajoutant après vous aurez un debugger pour tout ce qui est conflit d'id ou absence d'objet pour IE |
|
|
|
10
|
|
|
#8 | ||
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Bien, on dirait enfin que la syntaxe suivante fonctionne, grâce à vos conseils, merci bien :
J'ai choisi de créer un objet HTML input, dans lequel j'affecte l'objet Dojo. Code :
Quand on change le nombre de phases dans le select initial, je lance la fonction lanceBlocPhases() qui convoque dans une boucle la fonction lancePhase(numPhase,totalPhases) Elle doit donc d'abord tout réinitialiser, tout le divPhases. Si je fais divPhases.innerHTML=''; Cela fonctionne, sauf pour les objets dojo. Comment élimine-t-on des objets dojo créés dynamiquement ? |
||
|
|
00
|
|
|
#9 |
|
Membre éprouvé
![]() Gibot DanielInscription : janvier 2010 Messages : 314 ![]() |
Pour éliminer mes objets dojo, j'utilise :
Code :
dijit.byid('monObjetDojo').destroyRecursive(true); Par contre, pour la valeur true ou false, je n'ai pas vu de différences. |
|
|
10
|
|
|
#10 |
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Mais l'id de l'objet dojo étant construit avec concaténation de variable, je ne sais pas d'avance si je dois détruire debut_1, debut_2, debut_10 etc...
Ne peut on détruire tous les objets dojo par le type dateTextBox par exemple ? |
|
|
00
|
|
|
#11 | ||
|
Membre éprouvé
![]() Gibot DanielInscription : janvier 2010 Messages : 314 ![]() |
Si vous detruisez tous les objets de type DateTextBox inutile de savoir son id.
Vous connaissez la base de l'id -- > "debut_" Il suffit de faire une boucle jusqu'à ce que l'id n'existe plus. Code :
|
||
|
|
10
|
|
|
#12 |
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
J'ai beau manipuler cette boucle de destruction, cela fait tout bugger.
Code :
Si vous detruisez tous les objets de type DateTextBox |
|
|
00
|
|
|
#13 |
|
Membre éprouvé
![]() Gibot DanielInscription : janvier 2010 Messages : 314 ![]() |
Il existe bien un moyen de "scanner" les DateTextBox de la page mais cela revient a faire une boucle encore plus complexe que ce que je vous ai fourni.
Avez vous essaye en mettant false ? Y a t'il un message d'erreur ? |
|
|
00
|
|
|
#14 | |
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Citation:
Code :
throw new Error("Tried to register widget with id=="+_1.id+" but that id is already registered"); |
|
|
|
00
|
|
|
#15 | ||
|
Membre éprouvé
![]() Gibot DanielInscription : janvier 2010 Messages : 314 ![]() |
Bonjour,
J'ai testé un système d'ajout/suppression de DateTextBox, histoire de me faire une meilleure idée de ce que vous souhaitez réaliser. J'ai donc pu modifier la fonction de suppression que je vous avais fournie. Le numText correspond à l'incrémentation de l'id des DateTextBox. Le destroyRecursive n'était pas la bonne méthode pour supprimer l'objet mais le destroy tout simplement. Code :
|
||
|
|
00
|
|
|
#16 |
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Là, je suis un peu en vacances.
Mais dès que je rentre, je regarde tout ça, et dans tous les cas, un grand merci d'avance. Je vous tiens au courant à la reprise, à la miaou.
|
|
|
00
|
|
|
#17 | ||||||
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Bonjour.
Malheureusement, j'ai le code erreur suivant (voir ligne 8 du premier extrait), et j'avoue que je ne sais pas pourquoi. Pendant la création dynamique des calendriers debut, j'ai bien ajouté les lignes de code d'attribution d'id que vous suggérez... Mais j'ai sûrement encore raté des choses. Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#18 | ||||
|
Membre éprouvé
![]() Gibot DanielInscription : janvier 2010 Messages : 314 ![]() |
Bonjour,
Si le dijit.byId n'est pas connu c'est que soit le parse n'est pas fait soit le dijit n'est pas créé dans la fonction. Est ce que vous récupérez bien la variable "num" ? Si ce n'est pas le cas, faite : Code :
A ajouter dans la fonction de création à la fin : Code :
|
||||
|
|
10
|
|
|
#19 | ||
|
Membre éprouvé
![]() ![]() Sylvie VAUTHIERDéveloppeuse Web Inscription : juin 2008 Messages : 450 ![]() |
Finalement, c'est ce code qui fonctionne, merci Daniel.
J'ai supprimé la dernière ligne de votre fonction, rectifié 2 bugs de mon code que vous ne pouviez pas voir, et tout tourne bien. Encore merci pour votre dévouement. ![]() Code :
|
||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com