mobilemode.api.form_wev8.js 6.84 KB
define("mApi/form", ["mUtil"], function(mUtil) {
	function Wev_MField(name, rowindex, pageid){
		this.name = name.toLowerCase();
		this.rowindex = rowindex;
		pageid = pageid || mUtil.getCurrentPageId();
		var that = this, $field, $page = $("#"+pageid), matches = that.name.match(/(\w+)\.(\w+)/);
		if(matches){
			this.detailtable = matches[1];
			this.name = matches[2];
		}
		if(this.detailtable && typeof(rowindex) != "undefined"){
			var instance = mUtil.getDetailTableInstance(this.detailtable, '', pageid);
			if(!instance){
				var detailtableName = this.detailtable;
				mUtil.getLabel(5363, "未找到名称为#DETAILTABLE#的明细表实例。",function(msg){
        			console.error(msg.replace("#DETAILTABLE#",detailtableName));
	            });
			}
			that.instance = instance;
		}else{
			$.each($("div[class^='wev-comp-'][data-form]:not(.wev-comp-DetailTable)", $page), function(i){
				var $this = $(this),
					mecId = $this.attr("id").replace("NMEC_", ""),
					formid = $this.data("form"),
					instance = mUtil.getInstance(mecId, pageid),
					viewModel = instance.viewModel,
					isDetailField = formid.indexOf("detailtable") == 0;
				
				if(instance.containsField){
				    if(instance.containsField(that.name)){
				        that.instance = instance;
	                    $field = $();
	                    return false;
				    }
				}else{
				    var mecfname = viewModel.field.name.toLowerCase();
				    if(that.name == mecfname && ((that.detailtable && isDetailField) || (!that.detailtable && !isDetailField))){
	                    that.instance = instance;
	                    $field = $this.find("[name^='fieldname_']");
	                    return false;
	                }
				}
			});
		}
		
		if($field == null){
			this.$Obj = $();
			if(typeof(rowindex) == "undefined"){
				mUtil.getLabel(5364, "未找到名称为#NAME#的字段。",function(msg){
        			console.error(msg.replace("#NAME#",name));
	            });
			}
		}else{
			this.$Obj = $field;
		}
		return this;
	}

	Wev_MField.prototype.val = function(v){
		if(typeof(v) == "undefined"){	//取值
			if(this.instance && this.instance.getValue){
				return this.instance.getValue(this.name, this.rowindex);
			}else{
				return this.$Obj.val()
			}
		}else if(this.instance){
			if(this.detailtable){
				var args = [v];
				if(this.rowindex){
					args = [this.name, v, this.rowindex];
				}
				this.instance.setValue.apply(this.instance, args);
			}else{
				this.instance.setValue(v);
			}
			return this;
		}
	};

	Wev_MField.prototype.text = function(){
		var instance = this.instance;
		if(instance && mUtil.isFunction(instance.text)){
			return instance.text(this.name, this.rowindex);
		}else{
			return this.$Obj.text();
		}
	};
	
	["change", "click", "on", "off", "bind", "unbind"].forEach(function(item){
		Wev_MField.prototype[item] = function(){
			this.$Obj[item].apply(this.$Obj, arguments);
		}
	});
	

	function getObj(obj) {
		var $obj;

		if (mUtil.isString(obj)) {
			$obj = $("#" + obj);
		} else {
			$obj = $(obj);
		}

		return $obj;
	}

	return {
		getField: function(name, rowindex, pageid){
			return new Wev_MField(name, rowindex, pageid);
        },
        submit: function(formid, callbackFn,pageid){
        	var formInstance = mUtil.getInstance(formid, pageid);
        	if(formInstance && mUtil.isFunction(formInstance.submit)){
        		formInstance.submit(callbackFn);
        	}else{
        		mUtil.getLabel(6131, "未找到表单ID:#FORMID#对应的表单插件或表单插件对应的#method#方法不存在",function(msg){
        			alert(msg.replace("#FORMID#",formid).replace("#method#","submit"));
	            });
        	}
        },
        deleteData: function(formid, callbackFn , pageid){
        	var formInstance = mUtil.getInstance(formid, pageid);
        	if(formInstance && mUtil.isFunction(formInstance.deleteData)){
        		formInstance.deleteData(callbackFn);
        	}else{
        		mUtil.getLabel(6131, "未找到表单ID:#FORMID#对应的表单插件或表单插件对应的#method#方法不存在",function(msg){
        			alert(msg.replace("#FORMID#",formid).replace("#method#","deleteData"));
	            });
        	}
        },
        wrapToDatetime : function(obj, type, custConfig){
        	var $fields = getObj(obj);
			var pageEvent = require("pageEvent");
			
        	if($fields.length <= 0){return;}
        	
        	require(["dtpicker"], function(){
        		$fields.each(function(){
					var $field = $(this), prevOffset = $field.data("prevoffset") || 100, nextOffset = $field.data("nextoffset") || 1;
					var currYear = (new Date()).getFullYear(), beginYear = currYear - prevOffset, endYear = currYear + nextOffset;
					var $viewspan = $field.siblings(".wev-field-view-span");
					var _dtpicker = null;
					var _hidePicker = function () {
						_dtpicker && _dtpicker.hide();
					};

					$viewspan.on("click", function () {
						var _self = this,
							$this = $(this),
							fieldType = $this.closest(".wev-field").attr("data-fieldType");

						if (!_self.dtPicker) {
							_self.dtPicker = new $.DtPicker({ 
								type: fieldType, 
								value: $field.val(),
								beginYear: beginYear,
								endYear: endYear,
								close: function () {
									pageEvent.destory("change", _hidePicker)
								}
							});
						}
						_self.dtPicker.show(function (result) {
							var value = result.value;
							$this.html(value);
							$field.val(value).trigger("change");
							$this[value ? "removeClass" : "addClass"]("wev-field-view-tip").html(value ? value : $this.attr("showname"));
							_self.dtPicker.dispose();
							_self.dtPicker = null;
							return false;
						});
						_dtpicker = _self.dtPicker;
						pageEvent.destory("change", _hidePicker).register("change", _hidePicker);
					});
										
            		$field.change(function(){
    	    			var v = $(this).val();
    	    			if(v != ""){
    	    				$(this).parent().addClass("wev-has-value");
    	    			}else{
    	    				$(this).parent().removeClass("wev-has-value");
    	    			}
    	    		});
    	    		
            		$field.siblings(".wev-clear-btn").click(function(){
    	    			$field.val("").triggerHandler("change");
    	    			$viewspan.html($viewspan.attr("showname")).addClass("wev-field-view-tip");
    	    		});
        		});
        	});
        },
        wrapToToggle : function(obj){
        	var $field = getObj(obj);

        	if($field.length <= 0){return;}
        	
        	$field.change(function(){
    			var v = $(this).val();
    			var $toggle = $(this).siblings(".wev-toggle");
    			if(v == "" || v == "0"){
    				$toggle.removeClass("wev-active");
    			}else{
    				$toggle.addClass("wev-active");
    			}
    		});
        	
        	$field.siblings(".wev-toggle").click(function(){
				var $f = $(this).siblings("input");
				var v = $f.val();
				v = (v == "" || v == "0") ? "1" : "0";
				$f.val(v).triggerHandler("change");
			});
        }
	};
});