123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- MWF.xDesktop.requireApp("process.Xform", "Div", null, false);
- /** @class Source 数据源组件。
- * @o2cn 数据源
- * @example
- * //可以在脚本中获取该组件
- * //方法1:
- * var source = this.form.get("fieldId"); //获取数据源组件
- * //方法2
- * var source = this.target; //在组件本身的脚本中获取
- * @extends MWF.xApplication.process.Xform.Div
- * @o2category FormComponents
- * @o2range {Portal}
- * @hideconstructor
- */
- MWF.xApplication.process.Xform.Source = MWF.APPSource = new Class(
- /** @lends MWF.xApplication.process.Xform.Source# */
- {
- Extends: MWF.APPDiv,
- options: {
- /**
- * 加载数据后执行,但这时还未加载下属组件,可以可以使用this.target.data获取数据进行修改。
- * @event MWF.xApplication.process.Xform.Source#postLoadData
- * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
- */
- /**
- * 加载数据、下属组件后执行。
- * @event MWF.xApplication.process.Xform.Source#loadData
- * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
- */
- "moduleEvents": ["queryLoad","postLoad","load", "postLoadData", "loadData"]
- },
- _loadUserInterface: function(){
- this.data = null;
- if (this.json.path){
- if (this.json.sourceType=="o2"){
- if (this.json.path) this._getO2Source();
- }
- }
- },
- _getO2Address: function(){
- try {
- this.json.service = JSON.parse(this.json.contextRoot);
- }catch(e){
- this.json.service = {"root": this.json.contextRoot, "action":"", "method": "", "url": ""};
- }
- var addressObj = layout.serviceAddressList[this.json.service.root];
- var defaultPort = layout.config.app_protocol==='https' ? "443" : "80";
- if (addressObj){
- var appPort = addressObj.port || window.location.port;
- this.address = layout.config.app_protocol+"//"+(addressObj.host || window.location.hostname)+((!appPort || appPort.toString()===defaultPort) ? "" : ":"+appPort)+addressObj.context;
- // this.address = layout.config.app_protocol+"//"+addressObj.host+(addressObj.port==80 ? "" : ":"+addressObj.port)+addressObj.context;
- }else{
- var host = layout.desktop.centerServer.host || window.location.hostname;
- var port = layout.desktop.centerServer.port || window.location.port;
- this.address = layout.config.app_protocol+"//"+host+((!port || port.toString()===defaultPort) ? "" : ":"+port)+"/"+this.json.service.root;;
- }
- },
- //_getConfigParameters: function(){
- //
- // return pars;
- //},
- _getO2Uri: function(){
- //var uri = this.json.path || this.json.selectPath;
- var uri = this.json.path;
- var pars = {};
- if (this.json.parameters){
- Object.each(this.json.parameters, function(v, key){
- if (uri.indexOf("{"+key+"}")!=-1){
- var reg = new RegExp("{"+key+"}", "g");
- uri = uri.replace(reg, encodeURIComponent((v && v.code) ? (this.form.Macro.exec(v.code, this) || "") : v));
- }else{
- pars[key] = v;
- }
- }.bind(this));
- }
- var data = null;
- if (this.json.requestBody){
- if (this.json.requestBody.code){
- data = this.form.Macro.exec(this.json.requestBody.code, this)
- }
- }
- if (this.json.httpMethod=="GET" || this.json.httpMethod=="OPTIONS" || this.json.httpMethod=="HEAD" || this.json.httpMethod=="DELETE"){
- var tag = "?";
- if (uri.indexOf("?")!=-1) tag = "&";
- Object.each(pars, function(v, k){
- var value = (v && v.code) ? (this.form.Macro.exec(v.code, this) || "") : v;
- uri = uri+tag+k+"="+value;
- }.bind(this));
- }else{
- Object.each(pars, function(v, k){
- if (!data) data = {};
- var value = (v && v.code) ? (this.form.Macro.exec(v.code, this) || "") : v;
- data[k] = value;
- }.bind(this));
- }
- this.body = data;
- this.uri = this.address+uri;
- },
- _getO2Source: function(){
- this._getO2Address();
- this._getO2Uri();
- this._invoke(function(){
- this._loadSub(this.node);
- this.fireEvent("loadData");
- }.bind(this));
- },
- _invoke: function(callback){
- MWF.restful(this.json.httpMethod, this.uri, JSON.encode(this.body), function(json){
- /**
- * @summary 该属性获取当前数据源的数据,当数据源加载完成后才有值。
- * @member {Array|Object|String|Number|Boolean|Null}
- * @example
- * var field = this.form.get("fieldId").data; //获取数据源数据
- */
- this.data = json;
- this.fireEvent("postLoadData");
- if (callback) callback();
- }.bind(this), true, true);
- },
- setBody: function(data){
- this.body = data;
- },
- /**
- * @summary 替换全部的url参数,但不刷新组件
- * @param {Object} url参数
- * @example
- * //如,原来的组件url参数为:
- * { "page" : 1, "count" : 10 }
- *
- * this.form.get("fieldId").setParameters({"id":"662ede34-4e21-428a-9c3b-f1bf14d15650"});
- *
- * //执行后变为
- * {"id":"662ede34-4e21-428a-9c3b-f1bf14d15650"}
- */
- setParameters: function(json){
- this.json.parameters = json;
- this._getO2Address();
- this._getO2Uri();
- },
- /**
- * @summary 新增url参数,但不刷新组件。如果该参数key已经存在,则覆盖
- * @param {Object} url参数
- * @example
- * * //如,原来的组件url参数为:
- * { "page" : 1, "count" : 10 }
- *
- * this.form.get("fieldId").addParameters({
- * "page" : 2,
- * "id":"662ede34-4e21-428a-9c3b-f1bf14d15650"
- * });
- *
- * //执行后变为
- * {
- * "page" : 2,
- * "count" : 10
- * "id":"662ede34-4e21-428a-9c3b-f1bf14d15650"
- * }
- */
- addParameters: function(json){
- if (!this.json.parameters) this.json.parameters={};
- Object.each(json, function(v, k){
- this.json.parameters[k] = v;
- }.bind(this));
- this._getO2Address();
- this._getO2Uri();
- },
- /**
- * @summary 重新加载组件。会触发loadData事件
- * @param {Boolean} notInit - false表示不重新初始化子数据源和数据文本,true表示重新初始化,默认为false
- * @param {Function} callback 加载完成后的回调
- * @example
- * this.form.get("fieldId").reload(); //重新加载组件
- */
- reload: function(notInit, callback){
- this._getO2Uri();
- this._invoke(function(){
- this._loadSub(this.node, notInit);
- this.fireEvent("loadData");
- if (callback) callback();
- }.bind(this));
- },
- _loadSub: function(dom, notInit){
- var subDom = dom.getFirst();
- var module = null;
- while (subDom){
- module = null;
- module = subDom.retrieve("module", null);
- if (module){
- if (module._loadJsonData) module._loadJsonData(notInit);
- }else{
- this._loadSub(subDom);
- }
- //var type = subDom.get("MWFtype");
- //if (type){
- // if (type=="sourceText"){
- // module = subDom.retrieve("module");
- // module._loadData();
- // }else if (type=="subSource"){
- // module = subDom.retrieve("module");
- // module._loadData();
- // }else{
- // this._loadSub(subDom);
- // }
- //}else{
- // this._loadSub(subDom);
- //}
- subDom = subDom.getNext();
- }
- }
- });
|