;(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);