2010-07-12 8 views
1

J'ai créé une boîte de dialogue dans le dojo avec quelques champs de saisie. Basé sur quelques critères, je voudrais dynamiquement l'url de destination les données sont postées dans ce dialogue (l'équivalent de l'attribut d'action sur un formulaire). Pourtant, je ne vois aucun moyen de définir l'action d'un dialogue, ou même comment le soumettre manuellement.Soumettre manuellement une boîte de dialogue Dojo

Voici une version rudimentaire de la boîte de dialogue:

<div id="my_dialog" dojoType="dojo.dijit.Dialog" style="display:none;" title="My Dialog"> 
<input type="text" dojoType="dijit.form.TextBox" id="input_1" name="input_1" value="info" /> 
<button type="submit" dojoType="dijit.form.Button">Submit</button> 
</div> 

Répondre

3

Si vous mettez un formulaire dans la boîte de dialogue, vous pouvez y accéder comme n'importe quel autre formulaire Dojo. Mais vous devez vous assurer que ce dialogue n'est pas déjà sous une autre forme. C'était mon problème, il a fait disparaître la forme interne lorsque le dialogue est déplacé à la fin de l'étiquette du corps.

<div id="my_dialog" dojoType="dojo.dijit.Dialog" style="display:none;" title="My Dialog"> 
<form id="my_form" dojotType="dijit.form.Form" method="post" action="/path/"> 
<input type="text" dojoType="dijit.form.TextBox" id="input_1" name="input_1" value="info" /> 
<button type="submit" dojoType="dijit.form.Button" onclick="return someFunction();">Submit</button> 
</form> 
</div> 

En utilisant la structure ci-dessus, vous avez deux options pour obtenir les valeurs du formulaire: à partir de la boîte de dialogue ou de la forme. Cela signifie que dijit.byId ("my_dialog"). Attr ("valeur") est identique à dijit.byId ("my_form"). Attr ("valeur"). C'est ce qui m'a initialement confondu et fait de moi que le dialogue lui-même pourrait agir comme une forme.

Pour traiter ou valider le formulaire avant qu'il ne soit soumis, ajoutez onclick = "return someFunction();", et assurez-vous que la fonction renvoie true uniquement si le formulaire doit être soumis. Un autre écueil est que toutes les entrées dans le dialogue sont déplacées à la fin de la dom. Donc, si vous n'aviez pas le formulaire dans la boîte de dialogue, et que vous vous attendiez à ce que les entrées de la boîte de dialogue soient soumises avec un formulaire parent, cela ne se produira pas. Dans ce cas, je crée des champs cachés à l'intérieur du formulaire parent, puis copiez manuellement les valeurs d'entrée de dialogue dans ces champs avant de les soumettre.

0

dijit.Dialog n'a pas la capacité de se soumettre manuellement. C'est juste un conteneur et vous devez gérer vous-même le contenu.

Si vous souhaitez soumettre la boîte de dialogue, attachez simplement certains événements au bouton d'envoi et utilisez XHR pour soumettre les données. Lorsque la soumission est terminée, fermez la boîte de dialogue vous-même. Je l'ai compris et je vais partager ce que j'ai appris.

+0

Merci pour la réponse! J'ai aussi regardé dans xhr pour soumettre manuellement les données du formulaire, mais j'avais besoin de publier les données sans ajax car les données postées déterminaient où l'utilisateur finirait par se retrouver. Cela pourrait être fait via le callback xhr, mais dans ce cas, il était logique d'effectuer un post normal. –

Questions connexes