MWF.xDesktop.requireApp("process.Xform", "$Input", null, false); MWF.require("MWF.widget.UUID", null, false); /** @class Calendar 多选按钮组件。 * @example * //可以在脚本中获取该组件 * //方法1: * var field = this.form.get("fieldId"); //获取组件对象 * //方法2 * var field = this.target; //在组件本身的脚本中获取,比如事件脚本、默认值脚本、校验脚本等等 * @extends MWF.xApplication.process.Xform.$Input * @o2category FormComponents * @o2range {Process|CMS|Portal} * @hideconstructor */ MWF.xApplication.process.Xform.Checkbox = MWF.APPCheckbox = new Class( /** @lends MWF.xApplication.process.Xform.Checkbox# */ { Implements: [Events], Extends: MWF.APP$Input, loadDescription: function(){}, _loadNode: function(){ if (this.readonly || this.json.isReadonly ){ this._loadNodeRead(); }else{ this._loadNodeEdit(); } }, _loadNodeRead: function(){ this.node.empty(); this.node.set({ "nodeId": this.json.id, "MWFType": this.json.type }); var radioValues = this.getOptions(); var value = this.getValue(); if (value){ var texts = []; radioValues.each(function(item){ var tmps = item.split("|"); var t = tmps[0]; var v = tmps[1] || t; if (value.indexOf(v)!=-1){ texts.push(t); } }); this.node.set("text", texts.join(", ")); } }, _resetNodeEdit: function(){ var div = new Element("div"); div.set(this.json.properties); div.inject(this.node, "after"); this.node.destroy(); this.node = div; }, _loadNodeEdit: function(){ //this.container = new Element("select"); if (!this.json.preprocessing) this._resetNodeEdit(); this.node.set({ "id": this.json.id, "MWFType": this.json.type, "styles": { "display": "inline" } }); this.setOptions(); }, _loadDomEvents: function(){ }, _loadEvents: function(){ Object.each(this.json.events, function(e, key){ if (e.code){ if (this.options.moduleEvents.indexOf(key)!=-1){ this.addEvent(key, function(event){ return this.form.Macro.fire(e.code, this, event); }.bind(this)); }else{ //this.node.addEvent(key, function(event){ // return this.form.Macro.fire(e.code, this, event); //}.bind(this)); } } }.bind(this)); }, addModuleEvent: function(key, fun){ if (this.options.moduleEvents.indexOf(key)!==-1){ this.addEvent(key, function(event){ return (fun) ? fun(this, event) : null; }.bind(this)); }else{ var inputs = this.node.getElements("input"); inputs.each(function(input){ input.addEvent(key, function(event){ return (fun) ? fun(this, event) : null; }.bind(this)); }.bind(this)); } }, /** * @summary 重新计算下拉选项,该功能通常用在下拉选项为动态计算的情况. * @example * this.form.get('fieldId').resetOption(); */ resetOption: function(){ this.node.empty(); this.setOptions(); }, /** * @summary 获取选择项。 * @return {Array} 返回选择项数组,如果使用选择项脚本,根据脚本返回决定,如:
[
         *  "女|female",
         *  "男|male"
         * ]
* @example * this.form.get('fieldId').getOptions(); */ getOptions: function(){ if (this.json.itemType == "values"){ return this.json.itemValues; }else{ return this.form.Macro.exec(((this.json.itemScript) ? this.json.itemScript.code : ""), this); } //return []; }, /** * @summary 获取整理后的选择项。 * @return {Object} 返回整理后的选择项,如: *
{"valueList": ["","female","male"], "textList": ["","女","男"]}
     * 
* @example * var optionData = this.form.get('fieldId').getOptionsObj(); */ getOptionsObj : function(){ var textList = []; var valueList = []; var optionItems = this.getOptions(); if (!optionItems) optionItems = []; if (o2.typeOf(optionItems)==="array"){ optionItems.each(function(item){ var tmps = item.split("|"); textList.push( tmps[0] ); valueList.push( tmps[1] || tmps[0] ); }.bind(this)); } return { textList : textList, valueList : valueList }; }, setOptions: function(){ var optionItems = this.getOptions(); this._setOptions(optionItems); }, _setOptions: function(optionItems){ var p = o2.promiseAll(optionItems).then(function(radioValues){ this.moduleSelectAG = null; if (!radioValues) radioValues = []; if (o2.typeOf(radioValues)==="array"){ var flag = (new MWF.widget.UUID).toString(); radioValues.each(function(item){ var tmps = item.split("|"); var text = tmps[0]; var value = tmps[1] || text; var radio = new Element("input", { "type": "checkbox", "name": ((this.json.properties) ? this.json.properties.name : null) || flag+this.json.id, "value": value, "showText": text, "styles": this.json.buttonStyles }).inject(this.node); //radio.appendText(text, "after"); var textNode = new Element( "span", { "text" : text, "styles" : { "cursor" : "default" } }).inject(this.node); textNode.addEvent("click", function( ev ){ if( this.radio.get("disabled") === true || this.radio.get("disabled") === "true" )return; this.radio.checked = ! this.radio.checked; this.radio.fireEvent("change"); this.radio.fireEvent("click"); }.bind( {radio : radio} ) ); radio.addEvent("click", function(){ this.validationMode(); if (this.validation()) this._setBusinessData(this.getInputData("change") || []); }.bind(this)); Object.each(this.json.events, function(e, key){ if (e.code){ if (this.options.moduleEvents.indexOf(key)!=-1){ }else{ radio.addEvent(key, function(event){ return this.form.Macro.fire(e.code, this, event); }.bind(this)); } } }.bind(this)); }.bind(this)); } }.bind(this), function(){}); this.moduleSelectAG = p; if (p) p.then(function(){ this.moduleSelectAG = null; }.bind(this), function(){ this.moduleSelectAG = null; }.bind(this)); }, _setValue: function(value, m){ var mothed = m || "__setValue"; if (!!value){ var p = o2.promiseAll(value).then(function(v){ //if (o2.typeOf(v)=="array") v = v[0]; if (this.moduleSelectAG){ this.moduleValueAG = this.moduleSelectAG; this.moduleSelectAG.then(function(){ this[mothed](v); return v; }.bind(this), function(){}); }else{ this[mothed](v) } return v; }.bind(this), function(){}); this.moduleValueAG = p; if (this.moduleValueAG) this.moduleValueAG.then(function(){ this.moduleValueAG = null; }.bind(this), function(){ this.moduleValueAG = null; }.bind(this)); }else{ this[mothed](value); } // this.moduleValueAG = o2.AG.all(value).then(function(v){ // if (this.moduleSelectAG){ // this.moduleValueAG = this.moduleSelectAG; // this.moduleSelectAG.then(function(){ // this.moduleValueAG = null; // this.__setValue(v); // }.bind(this)); // }else{ // this.moduleValueAG = null; // this.__setValue(v); // } // return v; // }.bind(this)); // // if (this.moduleValueAG) this.moduleValueAG.then(function(){ // this.moduleValueAG = ""; // }.bind(this)); }, __setValue: function(value){ this._setBusinessData(value); var radios = this.node.getElements("input"); for (var i=0; idata.value){ this.notValidationMode(data.prompt); return false; } break; case "lt": if (v