dijit
Version:
Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u
74 lines (63 loc) • 2.06 kB
JavaScript
define([
"dojo/_base/array", // array.forEach
"dojo/_base/declare", // declare
"dojo/dom-class", // domClass.toggle
"dojo/query!css2", // query
"./CheckedMenuItem",
"./registry" // registry.getEnclosingWidget
], function(array, declare, domClass, query, CheckedMenuItem, registry){
// module:
// dijit/RadioButtonMenuItem
return declare("dijit.RadioButtonMenuItem", CheckedMenuItem, {
// summary:
// A radio-button-like menu item for toggling on and off
// Use both base classes so we get styles like dijitMenuItemDisabled
baseClass: "dijitMenuItem dijitRadioMenuItem",
role: "menuitemradio",
// checkedChar: String
// Character (or string) used in place of radio button icon when display in high contrast mode
checkedChar: "*",
// group: String
// Toggling on a RadioMenuItem in a given group toggles off the other RadioMenuItems in that group.
group: "",
_setGroupAttr: "domNode", // needs to be set as an attribute so dojo/query can find it
_setCheckedAttr: function(/*Boolean*/ checked){
// If I am being checked then have to deselect currently checked items
this.inherited(arguments);
if(!this._created){
return;
}
if(checked && this.group){
array.forEach(this._getRelatedWidgets(), function(widget){
if(widget != this && widget.checked){
widget.set('checked', false);
}
}, this);
}
},
_onClick: function(evt){
// summary:
// Clicking this item toggles it on. If it's already on, then clicking does nothing.
// tags:
// private
if(!this.disabled && !this.checked){
this.set("checked", true);
this.onChange(true);
}
this.onClick(evt);
},
_getRelatedWidgets: function(){
// Private function needed to help iterate over all radio menu items in a group.
var ary = [];
query("[group=" + this.group + "][role=" + this.role + "]").forEach(
function(menuItemNode){
var widget = registry.getEnclosingWidget(menuItemNode);
if(widget){
ary.push(widget);
}
}
);
return ary;
}
});
});