2010-11-19 13 views
0

Je tente de créer une forme assez complexe en utilisant les widgets dojo et dijit. Le formulaire a plusieurs «sections» qui permettent à l'utilisateur de joindre un objet existant (via une balise de sélection) ou de créer un objet entièrement nouveau dans le formulaire.Dojo/Dijit: Sélection dynamique de l'attribut requis

Mes entrées sont affichées sous forme de boutons radio conditionnels et manipulées via javascript. Ce que j'ai des problèmes à faire, est de faire conditionnellement widgets Dijit nécessaires selon que les entrées sont rendus ou non (qui lui-même dépend de quel bouton radio est sélectionné.

Mon html (en fait jsp)

<div> 
    <input id="useExisting" type="radio" name="radio" checked value="useExisting" onclick="renderExistingInput()" /> <label for="useExisting">Use Existing</label> 
    <input id="new" type="radio" name="radio" value="new" onclick="renderNewInputs()"/> <label for="new">Create New</label> 
</div>  
<br> 
<div id="newInputs"> 
    <div class="row"> 
     <label class="label" for="newName">Name </label> 
     <span class="formInput"><input type="text" id="newName" name="newName" required="true" dojoType="dijit.form.ValidationTextBox"/></span> 
    </div> 
    <!-- More inputs with required="true"--> 

    <br> 
</div> 
<div id="existingInput> 
    <div class="row"> 
     <label class="label" for="existingSelect">Existing Object </label> 
     <span class="formInput"> 
      <select name="existingSelect" id="existingSelect" dojoType="dijit.form.Select"> 
       <!--JSTL tags for compiling list of options --> 
      </select> 
     </span> 
    </div> 
</div> 

accompagnement des fonctions javascript:

function renderExistingInput() { 

    dojo.fx.wipeOut(getWipeArguments('newInputs')).play(); 
    dojo.fx.wipeIn(getWipeArguments('existingInput')).play(); 
} 

function renderNewInputs() { 
    dojo.fx.wipeOut(getWipeArguments('existingInput')).play(); 
    dojo.fx.wipeIn(getWipeArguments('newInputs')).play(); 

} 

function getWipeArguments(id) { 
    var wipeArgs = { 
     node : id 
    }; 
    return wipeArgs; 
} 

le « flux » de base des interactions utilisateur est l'utilisateur clique sur un bouton radio, la div correcte rend à la suite de ce que je veux alors sont des entrées qui ne sont pas rendus à ne pas être pris en considération. Je ne suis pas en Je suis très sûr de savoir comment le faire. Est-il possible de manipuler cet attribut particulier directement via dojo? Ou y a-t-il une meilleure façon de le faire entièrement?

+0

http://stackoverflow.com/questions/2978570/disable-dojo-validation-on-certain-fields m'a orienté dans la bonne direction, mais il semble encore comme une façon maladroite de faire les choses – BuffaloBuffalo

Répondre

1

On dirait que ma réponse me regardait droit dans les yeux. Je devais simplement rassembler les différentes parties que j'avais rencontrées. Ma dernière fonction pour changer l'attribut « nécessaire » ressemble à:

function setWidgetRequiredAttributes(baseDomNodeId, requiredValue){ 
    foundWidgets = dijit.findWidgets(dojo.byId(baseDomNodeId)); 
    console.log(foundWidgets); 
    foundWidgets.forEach(function(widget){ 
     widget.required=requiredValue; 
    }); 
}