2010-11-19 72 views
0

我试图用dojo和dijit小部件放在一起相当复杂的形式。该表单具有多个“部分”,允许用户附加现有对象(通过选择标签)或在表单中内联创建一个全新的对象。Dojo/Dijit:动态选择输入必需属性

我的输入呈现有条件的单选按钮,并通过JavaScript处理。什么我有这样的问题的基础上,有条件做需要的dijit小部件的输入是否呈现与否(其本身取决于哪个单选按钮被选中的。

我的HTML(实际上是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> 

随行的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; 
} 

用户交互的基本“流”是用户点击一个单选按钮,正确DIV呈现为一个结果,我想那么,什么是不渲染不考虑投入。我不是en非常确定如何做到这一点。是否有可能通过dojo直接操作该特定属性?还是有更好的方法来完成这一切?

+0

http://stackoverflow.com/questions/2978570/disable-dojo-validation-on-certain-fields我指出了正确的方向,但它看起来仍然是一种笨拙的做事方式 – BuffaloBuffalo 2010-11-19 21:03:36

回答

1

看起来很像我的回答正盯着我。我只需要将我遇到的不同部分组合在一起。我对改变了“要求”属性的最终功能是这样的:

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