;(function ($) { /** * 单选按钮组 * * @example * var editor = new FR.RadioGroup({ * renderEl : 'body', * width : 200, * height : 100, * columnsInRow : 3, //一行能显示的个数 * items : [ * {text : '111', value : '1'}, * {text : '222', value : '2'}, * {text : '333', value : '3'}, * {text : '444', value : '4'}, * {text : '555', value : '5'}, * {text : '666', value : '6'} * ] * }); * * @class FR.RadioGroup * @extends FR.ToggleButtonGroup * * @cfg {JSON} options 配置属性 * @cfg {Boolean} [options.adaptive=false] 是否自使用宽度换行,如果为true,将自动计算每行放置多少个子控件 * @cfg {Number} [options.columnsInRow=0] 每行包含子控件的个数,0表示只有一行,全部子控件都在这一行里面 */ FR.RadioGroup = FR.extend(FR.ToggleButtonGroup, { lbox_class: 'fr-group-box', sbox_class: 'fr-group-span', _init: function () { FR.RadioGroup.superclass._init.apply(this, arguments); }, initData: function () { if (this.options.data) { return; } if (this.options.controlAttr) { this.setSource(this.options.controlAttr); this._confirmEvents = function () { this.fireEvent(FR.Events.AFTERINIT); }; return; } if (this.options.widgetUrl) { this.options.data = FR.DataFactory.createSynchronJSONData( this.options.widgetUrl, false); this.options.data.resetStatus(this.createDependencePara4Data()); } else if (this.options.items) { this.options.data = FR.DataFactory .createSynchronArrayData(this.options.items); } var self = this; this.options.data.afterRead(function (items) { if (self.isBoxBuild !== true) { self._buildBox(items); } }); this.options.data.loadData(); }, _setItems: function (items) { var records = items || [], len = records.length; var rname; if (this.options.widgetName) { rname = this.options.widgetName; } else { rname = "noNameChild"; } var self = this; $.each(records, function (idx, it) { if (self.options.adaptive) { var outter = $("<span></span>") .addClass(self.sbox_class) .appendTo(self.$container); } else { var outter = $("<span/>") .addClass(self.sbox_class); var gridElement = { column: idx % self.gridConfig.columns, row: Math.floor(idx / self.gridConfig.columns), el: outter }; self.gridConfig.items.push(gridElement); } self.buttonArray[idx] = self.initItemRadio(idx,it,outter,rname); self.buttonArray[idx].on( FR.Events.BEFORESTATECHANGE, function () { self .fireEvent(FR.Events.BEFORESTATECHANGE); }); self.buttonArray[idx].on(FR.Events.STATECHANGE, function () { self.assureOneButtonChecked(this); if (this.selected() === true || self.getValue() == "") { self.fireEvent(FR.Events.STATECHANGE, idx); self.fireEvent(FR.Events.AFTEREDIT); } else { self.oriValue = self.getValue(); } }); }); if (!self.options.adaptive) { this.grid = new FR.GridLayout(this.gridConfig); this.grid.element.doLayout(); this._checkTable(); } }, initItemRadio: function(idx,it,outter,rname){ return new FR.RadioButton({ renderEl: $("<div/>").appendTo(outter), disabled: this.options.disabled, text: it.getShowValue(), fieldValue: it.getValue(), sessionID: this.options.sessionID, name: rname, fontSize: this.options.fontSize }); }, assureOneButtonChecked: function (radio) { var foundSelected = false; if (radio.isSelected()) { for (var i = 0, len = this.buttonArray.length; i < len; i++) { if (this.buttonArray[i] == radio) { foundSelected = true; continue; } this.buttonArray[i].setSelectedWithoutEvent(false); } } if (!foundSelected && this.options.assureSelect === true) { radio.setSelectedWithoutEvent(true); } }, getValue: function () { return this.getTV(false); }, getText: function () { return this.getTV(true); }, /** * 获取组件的显示值或者实际值 * @private * @param forShowValue 是否返回显示值 * @returns {String} 返回控件的值 */ getTV: function (forShowValue) { var self = this; var value = ""; $.each(self.buttonArray, function (idx, it) { if (it.selected()) { var record = self.options.data.getRecord(idx); if (record) { value = forShowValue ? record.getShowValue() : record.getValue(); } } }); return value; }, _dealValueWithEvents: function (value) { var self = this; var argument = arguments[1]; var setValueFunc = function () { if (self.isBoxBuild !== true) { return; } clearInterval(sh); var oldValue = self.options.value; if (typeof value == 'boolean') { value = value ? 'true' : 'false'; } if (!value && value !== 0) { return; } for (var i = 0; i < self.buttonArray.length; i++) { self.buttonArray[i].setSelectedWithoutEvent(false); } for (var i = 0, len = self.buttonArray.length; i < len; i++) { if (self.buttonArray[i].options.fieldValue == value) { if (argument !== false) { self.buttonArray[i].setSelected(true); } else { self.buttonArray[i].setSelectedWithoutEvent(true); } break; } } }; if (this.isBoxBuild === true) { setValueFunc(); return; } var sh = setInterval(setValueFunc, 100); }, isValidate: function (cValue) { var validate = FR.RadioGroup.superclass.isValidate.apply(this, arguments); if (validate === false) { if (this.oriValue) { this._dealValueWithEvents(this.oriValue); } } return validate; } }); $.shortcut("radiogroup", FR.RadioGroup); })(jQuery);