123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- /*
- 外部方法
- getResult(verify, separator, isAlert, onlyModified, keepAllData )
- 返回:如果不校验或者通过了校验返回表单上的数据,如果不能通过校验返回null
- 参数:
- verify 是否校验,
- separator 多值域的分割符,
- isAlert 如果verify为true则是否提醒用户校验未通过,
- onlyModified只获取修改过的结果,
- keepAllData获取所有MDOMItem对象的值并保留未生成对象的data
- getItem( name )
- 根据name返回MDOMItem对象
- verify(isAlert)
- 校验用户是否已经填写了必填对象
- */
- MWF.xDesktop.requireApp("Template", "MDomItem", null, false);
- var MForm = new Class({
- Extends: MWF.widget.Common,
- Implements: [Options, Events],
- options : {
- style : "default",
- isNew : false,
- isEdited : false,
- emptyItemContainer : true,
- showNotEmptyFlag : false,
- //batch,所有item的错误都校验,每个item所有错误一起校验,错误显示在Item的字段后或指定区域;
- //batchSingle, 所有item的错误都校验,每个item只校验一个错误,错误显示在Item的字段后或指定区域;
- //alert,验证时遇到一个不成功的Item用app.notice()弹出消息后中断,
- //single,验证时遇到一个不成功的Item在字段后面或指定区域显示错误信息后中断
- verifyType : "alert",
- itemTemplateUrl : "",
- containerHtml : null,
- itemTemplate : null,
- hasColon : false
- },
- initialize: function (container, data, options , app, css ) {
- this.setOptions(options);
- this.path = "../x_component_Template/$MForm/";
- if( this.options.style ) {
- this.cssPath = "../x_component_Template/$MForm/" + this.options.style + "/css.wcss";
- this._loadCss();
- }else{
- this.css = {};
- }
- if( css ){
- this.css = Object.merge( this.css, css )
- }
- this.app = app;
- this.container = $(container);
- this.data = typeOf( data ) === "object" ? [data] : data;
- this.isSourceDataEmpty = false;
- if( !this.data || this.data == "" ){
- this.isSourceDataEmpty = true;
- this.data = [{}];
- }
- this.itemTemplateUrl = this.options.itemTemplateUrl;
- this.itemTemplate = this.options.itemTemplate;
- this.items = null;
- this.labelContainers = null;
- this.itemContainers = null;
- this.valSeparator = /,|;|\^\^|\|/g; //如果是多值对象,作为用户选择的多个值的分隔符
- },
- load: function () {
- this.fireEvent("queryLoad");
- this.loadTemplate( function(){
- //如果itemTemplate没有name赋值Key
- for( var it in this.itemTemplate ){
- if( !this.itemTemplate[it]["name"] ){
- this.itemTemplate[it]["name"] = it;
- }
- this.itemTemplate[it]["key"] = it;
- }
- //如果itemTemplate没有name和Key不一致,那么根据name赋值itemTemplate
- var json = {};
- for( var it in this.itemTemplate ){
- if( it != this.itemTemplate[it]["name"] ){
- json[ this.itemTemplate[it]["name"] ] = this.itemTemplate[it];
- }
- }
- for( var it in json ){
- this.itemTemplate[it] = json[it];
- }
- this.items = {};
- this.itemsByKey = {};
- if( this.options.containerHtml ){
- this.container.set("html",this.options.containerHtml);
- }
- this.labelContainers = this.container.getElements("[lable]");
- this.itemContainers = this.container.getElements("[item]");
- this.formatStyles();
- (this.options.isEdited || this.options.isNew) ? this.loadEdit() : this.loadRead();
- this.fireEvent("postLoad");
- }.bind(this) )
- },
- formatStyles: function(){
- this.container.getElements("[styles]").each(function(el){
- var styles = el.get("styles");
- if( styles && this.css[styles] ){
- el.setStyles( this.css[styles] )
- }
- }.bind(this));
- this.container.getElements("[class]").each(function(el){
- var className = el.get("class");
- if( className && this.css[className] ){
- el.setStyles( this.css[className] )
- }
- }.bind(this))
- },
- loadTemplate : function( callback ){
- if ( !this.itemTemplate && this.itemTemplateUrl) {
- MWF.getJSON(this.itemTemplateUrl, function(json){
- this.itemTemplate = json;
- if( callback )callback();
- }.bind(this));
- }else{
- if( callback )callback();
- }
- },
- changeMode: function(keepData){
- debugger;
- // this.itemContainers.each(function(node){
- // node.empty();
- // });
- // this.items = {};
- // this.itemsByKey = {};
- //
- // this.isEdited ? this.loadRead() : this.loadEdit();
- for(var key in this.items){
- this.isEdited ? this.items[key].readMode(keepData) : this.items[key].editMode(keepData)
- }
- this.isEdited = !this.isEdited;
- },
- loadEdit : function() {
- if (this.options.isNew) {
- this.formatEdit(this.itemTemplate, true);
- } else if (!this.isSourceDataEmpty) {
- if (typeOf(this.data) != "array") {
- this.data = [this.data]
- }
- for (var i = 0; i < this.data.length; i++) {
- var d = this.data[i];
- var items = this.itemTemplate;
- for (var it in d ) {
- if (items[it]) {
- items[it].value = d[it];
- }
- }
- this.formatEdit(items, false);
- }
- for (var it in this.itemTemplate ) {
- this.itemTemplate[it].value = "";
- }
- } else {
- this.formatEdit(this.itemTemplate, true);
- }
- },
- loadRead : function() {
- if (this.options.isNew) {
- this.formatRead(this.itemTemplate);
- } else if (!this.isSourceDataEmpty) {
- if ( typeOf(this.data) != "array") {
- this.data = [this.data]
- }
- for (var i = 0; i < this.data.length; i++) {
- var d = this.data[i];
- var items = this.itemTemplate;
- for (var it in d ) {
- if (items[it]) {
- items[it].value = d[it];
- }
- }
- this.formatRead(items);
- }
- for (var it in this.itemTemplate ) {
- this.itemTemplate[it].value = "";
- }
- }
- },
- //formatRead : function(itemData) {
- // var self = this;
- //
- // this.labelContainers.each(function( el ) {
- // var obj = itemData[el.get("lable")];
- // if (!obj)
- // return;
- // el.set("text",obj.text);
- // });
- //
- // this.itemContainers.each(function( el ) {
- // var obj = itemData[el.get("item")];
- // if (!obj)
- // return;
- //
- // if( obj.style ){
- // el.setStyles( obj.style )
- // }
- //
- // if( typeOf( obj.value ) == "function" ) {
- // var value = obj.value();
- // }else if( typeOf( obj.value ) == "boolean" ){
- // var value = obj.value.toString();
- // }else{
- // var value = (obj.value ? obj.value : "").toString();
- // }
- // if( obj.type == "hidden" ) {
- // el.hide();
- // el.set("html",value.replace( this.valSeparator, ",").replace(/\n/g,"<br/>") )
- // }else if( obj.type == "radio" || obj.type == "select" || obj.type == "checkbox" || obj.type == "multiselect" ) {
- // var values = value.split( this.valSeparator );
- // if( obj.selectText && obj.selectValue ){
- // var selectValues = this._getSelectOpt( obj.selectValue );
- // var selectTexts = this._getSelectOpt( obj.selectText );
- // var result = [];
- // for( i=0;i<selectValues.length;i++){
- // if( values.contains( selectValues[i] ) ){
- // result.push( selectTexts[i] )
- // }
- // }
- // el.set("html",result.join(","));
- // }else{
- // el.set("html",value.replace( this.valSeparator, ",").replace(/\n/g,"<br/>") )
- // }
- // }else if( obj.type == "rtf"){
- // el.set("html",value )
- // } else {
- // el.set("html",value.replace( this.valSeparator, ",").replace(/\n/g,"<br/>") )
- // }
- // }.bind(this))
- //},
- formatRead : function(itemData) {
- var self = this;
- this.isEdited = false;
- this.labelContainers.each(function( el ) {
- var obj = itemData[el.get("lable")];
- if (!obj)
- return;
- el.set("text",obj.text + (self.options.hasColon ? ":" : "") );
- });
- this.itemContainers.each(function( el ) {
- var obj = itemData[el.get("item")];
- if (!obj)
- return;
- if (self.options.emptyItemContainer) {
- el.set("html","");
- }
- obj.isEdited = false;
- self.loadItem(obj, el);
- })
- },
- _getSelectOpt: function( option ){
- var opt = option;
- if( typeOf( opt ) == "function" ){
- opt = opt.call();
- }
- return typeOf( opt ) == "array" ? opt : opt.split( this.valSeparator );
- },
- formatEdit : function(itemData, isNew, unid) {
- var self = this;
- this.isEdited = true;
- this.labelContainers.each(function( el ) {
- var obj = itemData[el.get("lable")];
- if (!obj)
- return;
- var text = obj.text + (self.options.hasColon ? ":" : "");
- if (self.options.showNotEmptyFlag && obj.notEmpty) {
- el.set("html", text + "<span style='color:red;'>*</span>")
- } else {
- el.set("text",text);
- }
- });
- this.itemContainers.each(function( el ) {
- var obj = itemData[el.get("item")];
- if (!obj)
- return;
- if (self.options.emptyItemContainer) {
- el.set("html","");
- }
- self.loadItem(obj, el);
- })
- },
- loadItem : function(template, container) {
- //if( template.disable )return;
- template.objectId = template.name;
- var item = new MDomItem(container, template, this, this.app, this.css );
- if( this.options.verifyType == "batchSingle" ){
- item.options.warningType = "single";
- }else{
- item.options.warningType = this.options.verifyType;
- }
- //item.parent = this;
- item.load();
- this.items[template.objectId] = item;
- this.itemsByKey[template.key] = item;
- },
- enableItem: function( itemName ){
- if( itemName && this.items[itemName] ){
- var item = this.items[itemName];
- if( item.options.disable ){
- item.enable();
- }
- }
- },
- disableItem: function( itemName ){
- if( itemName && this.items[itemName] ){
- var item = this.items[itemName];
- if( !item.options.disable ){
- item.disable();
- }
- }
- },
- verify : function(isShowWarming) {
- var flag = true;
- for (var it in this.items ) {
- if (!this.items[it].verify(isShowWarming)) {
- if (this.options.verifyType == "batch" || this.options.verifyType == "batchSingle") {
- flag = false;
- } else {
- return false;
- }
- }
- }
- return flag;
- },
- getItemsKeyValue : function(separator , onlyModified ) {
- //separator 多值合并分隔符
- var key_value = {};
- for (var it in this.items ) {
- var item = this.items[it];
- var value = onlyModified ? item.getModifiedValue() : item.getValue();
- if( value != null ){
- if (typeOf(value) === "array") {
- key_value[item.options.objectId] = ( typeOf(separator) == "string" ? value.join(separator) : value );
- } else {
- key_value[item.options.objectId] = value;
- }
- }
- }
- return key_value;
- },
- getResult : function(verify, separator, isShowWarming, onlyModified, keepAllData ) {
- if ( !verify || this.verify(isShowWarming)) {
- if( keepAllData ){
- var result = this.data[0];
- var keyValue = this.getItemsKeyValue(separator, onlyModified);
- for( var key in keyValue ){
- result[ key ] = keyValue[ key ];
- }
- return result;
- }else{
- return this.getItemsKeyValue(separator, onlyModified);
- }
- } else {
- return false;
- }
- },
- getItem : function( name ){
- return this.items[name] || this.itemsByKey[name];
- },
- clearWarning: function( type ){
- for (var it in this.items ) {
- var item = this.items[it];
- if( !type ){
- item.clearWarning( "empty" );
- item.clearWarning( "invalid" );
- }else{
- item.clearWarning( type )
- }
- }
- },
- reset: function(){
- for (var it in this.items ) {
- var item = this.items[it];
- item.reset();
- }
- },
- destroy : function(){
- Object.each(this.items, function(item){
- item.destroy();
- }.bind(this));
- this.container.empty();
- MWF.release(this);
- }
- });
|