Dojo RadioButton,以编程方式设置组

Posted

技术标签:

【中文标题】Dojo RadioButton,以编程方式设置组【英文标题】:Dojo RadioButton, setup a group programmatically 【发布时间】:2011-11-14 10:39:07 【问题描述】:

我有一个带有三个单选按钮的自定义小部件“MyWidget”,我希望属于同一个“组”。 如果我在模板文件的单选按钮中设置“名称”属性,那么问题是当我创建多个“MyWidget”小部件时,所有单选按钮共享同一个组。

我尝试将单选按钮的“名称”与

radioWifget.set('name', some_value) 

没有成功,也直接进入 DOM 代码:

dojo.query("INPUT[type='radio']", this.domNode).forEach( dojo.hitch(this, function(inputNode)
    inputNode.name = 'perill_'+this.id;
));

第二种形式设置名称属性,但它不能作为一个组工作。

任何帮助。

提前致谢。


我很抱歉,因为我自己找到了答案。

我会冒着有人给我投反对票的风险,但我更愿意把解决方案放在这里,因为也许可以帮助我以外的人。

解决方案是“MyWidget”模板中的单选按钮必须包含在“dijit.form.Form”小部件中。这样每个“MyWidget”都会有自己的单选按钮组。

【问题讨论】:

【参考方案1】:

我会选择自定义 FormValueWidget 并混合 _WidgetsInTemplateMixin,如下所示:

declare([
    "dojo/_base/declare",
    "dijit/form/_FormValueWidget",
    "dijit/_WidgetsInTemplateMixin",
    "dijit/form/RadioButton",
    "dojo/domReady!"
], function (declare, _FormValueWidget, _WidgetsInTemplateMixin) 

    return declare([_FormValueWidget, _WidgetsInTemplateMixin], 
        templateString: "<div><h2>Group of radioBtns '$name'</h2>" +
            "<input type='radio' $!nameAttrSetting data-dojo-attach-point='focusNode' data-dojo-type='dijit/form/RadioButton' checked='checked' data-dojo-props='value:\"radio1\"'></input>" +
            "<input type='radio' $!nameAttrSetting data-dojo-type='dijit/form/RadioButton' data-dojo-props='value:\"radio2\"'></input>" +
            "<input type='radio' $!nameAttrSetting data-dojo-type='dijit/form/RadioButton' data-dojo-props='value:\"radio3\"'></input>" +
            "<input type='hidden' value='$value'/>" +
            "</div>",
        _getValueAttr : function() 
            var selectedRadio = registry.findWidgets(this.domNode).filter(function(w)
                return w.get("checked");
            ).pop();
            return selectedRadio.get("value");
        
    );
);

在此处查看示例:http://jsfiddle.net/psoares/FdMEU/

【讨论】:

以上是关于Dojo RadioButton,以编程方式设置组的主要内容,如果未能解决你的问题,请参考以下文章

Dojo Datagrid - 以编程方式设置选定行的样式

dijit.form.Select 不会以编程方式设置值

dojo中以编程方式与以声明方式创建的小部件之间的区别?

如何设置 dijit.form.radiobutton 只读模式

Dojo 以编程方式验证 TextBox

我想以编程方式添加单选按钮并设置第一个项目被选中?