Dojo / Dijit: динамический выбор входного обязательного атрибута - PullRequest
0 голосов
/ 19 ноября 2010

Я пытаюсь собрать довольно сложную форму, используя виджеты dojo и dijit.Форма имеет несколько «разделов», которые позволяют пользователю прикрепить существующий объект (с помощью тега select) или создать совершенно новый объект, встроенный в форму.

Мои входные данные отображаются условно на основе переключателей и обрабатываются с помощью 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, поэтому мне нужны входные данные, которыеЯ не совсем уверен, как это сделать. Можно ли манипулировать этим конкретным атрибутом напрямую через dojo? Или есть лучший способ сделать это полностью?

1 Ответ

1 голос
/ 22 ноября 2010

Похоже, мой ответ смотрел мне прямо в лицо. Мне просто нужно было собрать разные части, с которыми я столкнулся. Моя последняя функция для изменения атрибута required выглядит так:

function setWidgetRequiredAttributes(baseDomNodeId, requiredValue){
    foundWidgets = dijit.findWidgets(dojo.byId(baseDomNodeId));
    console.log(foundWidgets);
    foundWidgets.forEach(function(widget){
        widget.required=requiredValue;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...