dijit.form.checkboxes работает как переключатели, но не изменяет компонент пользовательского интерфейса - PullRequest
0 голосов
/ 18 августа 2011

спасибо за те, что прокомментировали раньше.по какой-то причине мои флажки в dojo не обновляются.

function booleanWidget(values, units, defaultValues)
{
var container, widget,onChangeFunction;
container = widgetContainer();
onChangeFunction = function (e)
{
    var orig, value, siblingCheckboxes, i, thisNodeCheckedStatus;
    orig = this.domNode.parentNode;
    // has correct value for component that checked or unchecked.
    thisNodeCheckedStatus = this.checked;
    siblingCheckboxes = dojo.query( "input[type=checkbox]",orig);



    for (i=0; i< siblingCheckboxes.length; i++)
    {
        if( this.id!=siblingCheckboxes[i].id )
        {
            // when I print out these console logs.  I see that I am always processing correct sibling.
            console.log("i="+i+" TARGET CONDITION="+!thisNodeCheckedStatus+" id="+siblingCheckboxes[i].id);
            console.log("siblingCheckboxes["+i+"]="+siblingCheckboxes[i]);
            console.log("siblingCheckboxes["+i+"].checked="+siblingCheckboxes[i].checked);
            console.log("siblingCheckboxes["+i+"].getAttribute(\"checked\")="+siblingCheckboxes[i].getAttribute("checked") );
            console.log("siblingCheckboxes["+i+"].getAttribute(\"value\")="+siblingCheckboxes[i].getAttribute("value"));


// **** here*****  what do I need to do to get the checkbox to check or uncheck and display.  
// I can do any of the 3 commented out lines to try an update my checkboxes. see comment after line for result.  however sibling checkboxes does not remove check
//                siblingCheckboxes[i].checked = !thisNodeCheckedStatus; // changes .checked but not getAttribute.
//               siblingCheckboxes[i].setAttribute("checked", !thisNodeCheckedStatus); // changes : getAttribute() changes to false but not .checked
//                siblingCheckboxes[i].attr("checked", "!thisNodeCheckedStatus");  //receive : siblingCheckboxes[i].attr is not a function
            console.log("**siblingCheckboxes["+i+"].checked="+siblingCheckboxes[i].checked);
            console.log("**siblingCheckboxes["+i+"].getAttribute(\"checked\")="+siblingCheckboxes[i].getAttribute("checked") );

        }
    }

    validForm();
}

widget = new dijit.form.CheckBox({
    name: 'value',
    value: 'Y',
    onChange: onChangeFunction
});
dojo.place(widget.domNode, container);
dojo.place("<span>true</span>", container);
if (!defaultValues || (defaultValues && defaultValues[0] === "Y")) {
    widget.attr("checked", true);
}

widget = new dijit.form.CheckBox({
    name: 'value',
    value: 'N',
    onChange: onChangeFunction
});
dojo.place(widget.domNode, container);
dojo.place("<span>false</span>", container);
if (defaultValues && defaultValues[1] === "N") {
    widget.attr("checked", true);
}

return container;
}

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Я обнаружил, что вам нужно использовать set, а не attr.Попробуйте использовать:

widget.set('checked', true);

, который должен обновить виджет сразу.

0 голосов
/ 19 августа 2011

В приведенном ниже фрагменте javascript установлены 2 флажка, которые мне нужны, чтобы работать как переключатели.вот сгенерированный html

<span class="valueField">
    <span>
        <div class="dijit dijitReset dijitInline dijitCheckBox dijitCheckBoxChecked dijitChecked" wairole="presentation" role="presentation" widgetid="dijit_form_CheckBox_0">
             <input id="dijit_form_CheckBox_0" class="dijitReset dijitCheckBoxInput" type="checkbox" dojoattachevent="onclick:_onClick" dojoattachpoint="focusNode" name="value" value="Y" tabindex="0" style="-moz-user-select: none;" aria-pressed="true">
         </div>
         <span>true</span>
         <div class="dijit dijitReset dijitInline dijitCheckBox" wairole="presentation" role="presentation" widgetid="dijit_form_CheckBox_1">
              <input id="dijit_form_CheckBox_1" class="dijitReset dijitCheckBoxInput" type="checkbox" dojoattachevent="onclick:_onClick" dojoattachpoint="focusNode" name="value" value="N" tabindex="0" style="-moz-user-select: none;" checked="false">
          </div>
           <span>false</span>
      </span>
 </span>

console.log показывает, что атрибуты и .checked изменяются правильно, однако флажок, отображаемый в браузере, не обновляется.

Я используюfirefox 5.

function booleanWidget(values, units, defaultValues)
{
var container, widget,onChangeFunction;
container = widgetContainer();
onChangeFunction = function (e)
{
    var orig, value, siblingCheckboxes, i, thisNodeCheckedStatus;
    orig = this.domNode.parentNode;
    // has correct value for component that checked or unchecked.
    thisNodeCheckedStatus = this.checked;
    siblingCheckboxes = dojo.query( "input[type=checkbox]",orig);


    console.log("TARGET CONDITION="+!thisNodeCheckedStatus);



    for (i=0; i< siblingCheckboxes.length; i++)
    {
        console.log(siblingCheckboxes[i]);
        console.log(" id="+siblingCheckboxes[i].id+ "siblingCheckboxes["+i+"]="+siblingCheckboxes[i]);
        console.log("siblingCheckboxes["+i+"].checked="+siblingCheckboxes[i].checked);
        console.log("siblingCheckboxes["+i+"].getAttribute(\"checked\")="+siblingCheckboxes[i].getAttribute("checked") );
        // console.log("siblingCheckboxes["+i+"].get(\"checked\")="+siblingCheckboxes[i].get("checked") );         //siblingCheckboxes[i].get is not a function
        console.log("siblingCheckboxes["+i+"].getAttribute(\"value\")="+siblingCheckboxes[i].getAttribute("value"));
        //
        if( this.id!=siblingCheckboxes[i].id )
        {
            console.log("targeting "+1);
            siblingCheckboxes[i].parentNode.parentNode.attributes.isContentEditable=true;
            // when I print out these console logs.  I see that I am always processing correct sibling.


            siblingCheckboxes[i].checked = !thisNodeCheckedStatus; // changes .checked but not attribute.checked.
            siblingCheckboxes[i].setAttribute("checked", !thisNodeCheckedStatus); // changes attributes.checked but not .checked
            //                siblingCheckboxes[i].attr("checked", "!thisNodeCheckedStatus");  //gives me : siblingCheckboxes[i].attr is not a function
            //               siblingCheckboxes[i].set("checked",false);  //gives me : siblingCheckboxes[i].set is not a function


        }
        console.log("**siblingCheckboxes["+i+"].checked="+siblingCheckboxes[i].checked);
        console.log("**siblingCheckboxes["+i+"].getAttribute(\"checked\")="+siblingCheckboxes[i].getAttribute("checked") );
        console.log(siblingCheckboxes[i].parentNode.parentNode);
    }

    validForm();
}

widget = new dijit.form.CheckBox({
    name: 'value',
    value: 'Y',
    onChange: onChangeFunction
});
dojo.place(widget.domNode, container);
dojo.place("<span>true</span>", container);
if (!defaultValues || (defaultValues && defaultValues[0] === "Y")) {
    widget.attr("checked", true);
}

widget = new dijit.form.CheckBox({
    name: 'value',
    value: 'N',
    onChange: onChangeFunction
});
dojo.place(widget.domNode, container);
dojo.place("<span>false</span>", container);
if (defaultValues && defaultValues[1] === "N") {
    widget.attr("checked", true);
}

return container;
}

Один из разработчиков вспоминает, что слышал о перезагрузке или обновлении, которое находится на стадии.Я пробовал перемещаться по дереву до узлов диапазона, но не могу найти метод обновления или перезагрузки.Любая мысль о том, как сказать браузеру обновить или перезагрузить промежутки.

...