$.extend插件的开发与代码的编写

2023-11-03

$.extend插件的开发与代码的编写

$.extend(item)

该方法是将item合并到Jquery的全局对象中去,相当于为Jquery全局对象添加了一个静态方法

  $.extend({SayHello:function(value){alert(“hello “+value);}});

  这样写过之后,就可以直接调用SayHello方法:

  $.SayHello(“Olive”);
jQuery.extend({
    min: function(a, b) {
        return a < b ? a : b;
    },
    max: function(a, b) {
        return a > b ? a : b;
    }
});
jQuery.min(2, 3); //  2 
jQuery.max(4, 5); //  5

2、extend(result,item1,item2…..)

这里这个方法主要用来合并,将所有的参数项都合并result中,并返回result,但是这

样就会破坏result的结构。

(function ($) { /*** 统一设置datagrid 的一些默认参数*/
    $.extend($.fn.datagrid.defaults,
        {
            rownumbers: true,
            fit: true,
            pagination: true,
            striped: true,
            method: "post",
            pageSize: 20,
            pageList: [20, 50, 100]
        });
})(jQuery);

3、 extend({},item1,item2,……)

用这个方法,可以将所得的结果全部合并在{}中,并返回,而且还不会破坏原有的项的结构。

Var item={name:”olive”,age:23};

Var item1={name:”Momo”,sex:”gril”};

Var result=$.extend({},item,item1);

结果:

Result={name:”Momo”,age:23,sex:”gril”};

以上的结果表明extend方法将所有的项都合并到了{}中,但是其中item1中的name:“Momo” 将item中的name:“olive”给覆盖了

var defaults = {};
this.settings = $.extend({},defaults,options);

var defaults = {
	    		fieldCode: "gfyId",
	            url: "../../Security/selector/user/PublicServiceUserList.html?s=" + Math.random(),
	            multi: false,
	            code: "gfyId,gfyIdName",
	            keyRespField: "gfyId,id",
	            dictCode: "publicserviceName",
	            area: ['70%','70%']
	    };
		this.settings = $.extend({},defaults,options);

4、extend(bool,{},item1,item2….)

Extend方法还有带bool型参数的重载。

bool型参数为true表示深拷贝,为false时表示浅拷贝。具体可以通过一下示例来说明:

示例:

var item={name:“olive”,age:23,address{provice:”河南”,city:”郑州”}};

var item1={sex:”girl”,address{city:”北京”}};

var result=$.extend(true,item,item1);

var result1=$.extend(false,item,item1);

结果:

Result={name:“olive”,age:23,sex:”gril”,address:{provice:”河南”,city:”北京”}};

Result1={name:“olive”,age:23,sex:”gril”,address:{ city:”北京”}};

说明:

以上结果说明,当参数为ture时,即为深拷贝,当子项item1中的子项有与item中的子项相同属性的值不一样时,item1中子项的值会将item子项中的值给覆盖,当子项item1的属性跟item中的属性不同时,会与item进行合并。

当参数为false时,子项item1中的子项中与item中的子项属性相同时,item1中子项的属性值会将item中的值给完全覆盖。

 options: $.extend(true, {}, $.fn.gridsub.defaults, options)

5、$.extend(item)说是为Jquery类添加了静态方法,那么这里的$.fn.extend(item)就是为每一个实例添加一个实例方法了。

 $.fn.extend({hello:function(value){alert(“hello “+value);}});

 这样写过之后,在获取每一个示例之后,都可以调用该方法:

 $(“#id”).hello(“Olive”);

扩展easyui的方法

$.extend($.fn.datagrid.methods, {    
    addEditor : function(jq, param) {    
        if (param instanceof Array) {    
            $.each(param, function(index, item) {    
                var e = $(jq).datagrid('getColumnOption', item.field);    
                e.editor = item.editor;    
            });    
        } else {    
          //获取datagrid字段的属性  
            var e = $(jq).datagrid('getColumnOption', param.field);    
          //给编辑器赋值  
            e.editor = param.editor;    
        }    
    },    
    removeEditor : function(jq, param) {    
        if (param instanceof Array) {    
            $.each(param, function(index, item) {    
                var e = $(jq).datagrid('getColumnOption', item);    
                e.editor = {};    
            });    
        } else {    
            var e = $(jq).datagrid('getColumnOption', param);    
            e.editor = {};    
        }    
    }    
}); 


		    $.get(form_url + key, function (data) {
		        $submit_form.form("load", data.data.installCheckVo	);
		        $("#dglist2").datagrid({ data: data.data.deviceUserList });
		        if(pagetype == "show"){
		        	debugger;
		        	$("#dglist2").datagrid('removeEditor', 'deviceName');  
		        	$("#dglist2").datagrid('removeEditor', 'deviceNumber');  
		        	$("#dglist2").datagrid('removeEditor', 'assetsNumber');         	
		        }
		    });
  $.extend($.fn.datagrid.defaults,
        {
            rownumbers: true,
            fit: true,
            pagination: true,
            striped: true,
            method: "post",
            pageSize: 20,
            pageList: [20, 50, 100],
            loadFilter: function (data) {
                if (data && data.code !== undefined && data.code != "0")
                    return [];
                var returnData = $Core.util.ObjectHtmlEncode(data);

                if (returnData && returnData.data) {
                    return returnData.data;
                }
                return data;
            }
        });

创建对象

				var option = $.extend({elem:  "#" + _self.container, 
									   url : _self.url, 
									   cols: _self.title,
									   method: RequestMethod.METHOD_POST,
									   id : _self.tableId,							
									   even: true,
									   page: true,									//是否显示分页
									   pageNum: 1,
									   limit: _self.pageSize, 						//每页默认显示的数量
									   limits:[5,10,15,20,30],
									   done:function(res, curr, count){
										   debugger;
										   if(_self.afterDone && $.isFunction(_self.afterDone)){
						           				_self.afterDone(res, curr, count);
						           			}
									   }}, _self.layOption);
				//展示已知数据
				layui.table.render(option);
				

定义jquery扩展方法

/**
 * 上传附件通用JS (基于layerUI)
 */
;(function($){
	var defaults = {
			url : "/attach/upload",		
	    	fieldCode : "aboutDocument",						//业务字段编码
	    	fieldName : "相关文件",								//业务字段名称
	    	entityName : "template",							//业务实体
	};
	
	
	function renderUpload(options){
		debugger;
		this.settings = $.extend({},defaults,options);
		this.settings.elem = "#" + this.settings.fieldCode;
		this.settings.bindAction = "#" + this.settings.fieldCode + "_Action";				//上传操作按钮	
		this.settings.layuiUploadPreview = "#"+ this.settings.fieldCode +"_preview";
		this.settings.previewTableBody = "#"+ this.settings.fieldCode +"_Preview_Table";	//上传预览表格
		this.init();
	}
	//为函数添加原型链上的方法
	renderUpload.prototype = {
		init: function(){
			debugger;
			    var that = this;
				var uploadInst = layui.upload.render({
					    elem: that.settings.elem											//绑定元素
					    ,url: CONTEXT_PATH + that.settings.url 									//上传接口
					    ,accept:'file'
					    ,data:{																	//上传参数
					    	"entityName" : that.settings.entityName,							//业务实体
					    	"fieldCode" : that.settings.fieldCode,								//业务字段编码
					    	"fieldName" : that.settings.fieldName,								//业务字段名称
					    }								
					  	,auto:false												//是否选完文件后自动上传	如果设定 false,那么需要设置 bindAction 参数来指向一个其它按钮提交上传
					  	,size:0													//设置文件最大可允许上传的大小,单位 KB。不支持ie8/9;	0(即不限制)
					  	,multiple:true
					  	//是否允许多文件上传。设置 true即可开启。不支持ie8/9
					  	,bindAction: that.settings.bindAction					//指向一个按钮触发上传,一般配合 auto: false 来使用。值为选择器或DOM对象,如:bindAction: '#btn'
					    ,choose: function(res){									//选择文件后的回调函数
					    	debugger;
					    	var layIndex = layer.open({
					        	type: 1,
					        	title: "预览",
					        	maxmin: false,
					        	area : ['40%', '40%'],
					        	content:$(that.settings.layuiUploadPreview).removeAttr('style'),			//$.loadHtml(preUrl),
					        	success: function(layero){
					        		var demoListView = $(that.settings.previewTableBody).empty();
					        		var files = that.settings.selfFiles = res.pushFile(); //将每次选择的文件追加到文件队列
					        	      //读取本地文件
					        		res.preview(function(index, file, result){
					        	        var tr = $(['<tr id="upload-'+ index +'">'
					        	          ,'<td>'+ file.name +'</td>'
					        	          ,'<td>'+ (file.size/1024).toFixed(1) +' kb</td>'
					        	          ,'<td name="upload-status">等待上传</td>'
					        	          ,'<td>'
					        	            ,'<button class="layui-btn layui-btn-mini demo-reload layui-hide">重传</button>'
					        	            ,'<button class="layui-btn layui-btn-mini layui-btn-danger demo-delete">删除</button>'
					        	          ,'</td>'
					        	        ,'</tr>'].join(''));
					        	        
					        	        //单个重传
					        	        tr.find('.demo-reload').on('click', function(){
					        	        	res.upload(index, file);
					        	        });
					        	        
					        	        //删除
					        	        tr.find('.demo-delete').on('click', function(){
					        	        	
						        	        delete files[index]; //删除对应的文件
						        	        tr.remove();
						        	        uploadInst.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
						        	        if(Object.getOwnPropertyNames(files).length == 0){			//当上传预览没有文件时,关闭弹出框
						        	        	 layer.close(layIndex);
						        	        }
					        	        });
					        	        demoListView.append(tr);
					        	      });
					        	},
					        	end : function(){	//layer销毁回调
					        		$(that.settings.layuiUploadPreview).attr('style','display:none;');
					        		$(that.settings.previewTableBody).empty();
					        	},
					        	cancel: function(){ 		  //右上角关闭回调
					        	}
					        });
					    	
					    }
					  	,before: function(res){					//文件提交上传前的回调
					  		$("tr",$(that.settings.previewTableBody)).find("td[name='upload-status']").text("上传中...");
					  	}
					    ,done: function(res, index, upload){					//执行上传请求后的回调。返回三个参数,分别为:res(服务端响应信息)、index(当前文件的索引)、upload(重新上传的方法,一般在文件上传失败后使用)
					    	//上传完毕回调		"dealPicture_list_table"
					    	if(res && res.status == WebConst.SUCCESS){
					    		$(that.settings.bindAction).text("").text("上传成功");
					    		delete that.settings.selfFiles[index];
					    		//改变预览状态,将上传附件id存在	隐藏域中
					    		$("tr[id='upload-"+ index +"']",$(that.settings.previewTableBody)).find("td[name='upload-status']").text("附件缓存完毕,请点击提交上传附件");
					    		var unupload = $("#uploadAttachmentIds").data("uploadAttachmentIds");
					    		if(unupload){
					    			unupload.push(res.data['attachmentId']);
					    			$("#uploadAttachmentIds").data("uploadAttachmentIds",unupload);
					    		}else{
					    			if(res.data){
					    				$("#uploadAttachmentIds").data("uploadAttachmentIds",[res.data['attachmentId']]);
					    				/**
					    				 * 第一个方法赋不了值,通过下面的赋值
					    				 */
					    				$("#uploadAttachmentIds").val([res.data['attachmentId']]);
					    			}
					    		}
					    		
					    		//处理卡片页面列表展示问题
					    		var afile = res.data;
					    		var attachImg = "";
					    		if(!$.isEmptyStr(afile.fileName) && (afile.fileName.indexOf('docx')!=-1 
										 || afile.fileName.indexOf('doc')!=-1))
								 {
									 //attachImg = '<td><img src="' + CONTEXT_PATH +"platform/common/images/word.png" /></td>';
									 attachImg = '<td><img src="'+CONTEXT_PATH+ '/platform/common/images/word.png"' +'width="100" height="60" style="cursor:pointer;"/></td>';
								 }
								 else if(!$.isEmptyStr(afile.fileName) && afile.fileName.indexOf('pdf')!=-1)
								 {
									 attachImg = '<td><img src="'+CONTEXT_PATH+ '/platform/common/images/pdf.png"' +'width="100" height="60" style="cursor:pointer;"/></td>';
								 }
								 else
								 {
									 attachImg = '<td><img src="' + CONTEXT_PATH + '/attach/showPicture?attachmentId=' 
					          		 + afile.attachmentId + '&isThumbnail=true" max-width="120" width="100" height="60" style="cursor:pointer;"/></td>';
								 }
					    		var $tr = $(['<tr id="upload-'+ afile.attachmentId +'" attatchmentId="'+ afile.attachmentId +'">'
							          , attachImg
							          ,'<td>'+ afile.fileName +'</td>'
							          ,'<td>'+ afile.fileSize +' kb</td>'
							          ,'<td>'+ afile.createDate +'</td>'
							          ,'<td>'
							            ,'<a class="layui-btn layui-btn-mini demo-reload" href="'+  CONTEXT_PATH +'/attach/download?attachmentId='+ afile.attachmentId +'">下载</a>&nbsp;&nbsp;'
							            ,'<button class="layui-btn layui-btn-mini layui-btn-danger">删除</button>'
							          ,'</td>'
							        ,'</tr>'].join(''));
								  	$tr.find('button').on('click',function(){
								  		var attId = $(this).closest("tr").attr('attatchmentId');
								  		var url = CONTEXT_PATH + '/attach/delete/datafile';
								  		var rlt = $.getData(url,{'attachmentIds':attId});
										if(rlt && rlt.status == WebConst.SUCCESS){
											  $(this).closest("tr").remove();
											  $("#uploadAttachmentIds").data("uploadAttachmentIds").removeByValue(attId);
										  }
										return false;
								  	});
								  $("#" + afile.fieldCode + "_list_table").append($tr);
					    	}
					    }
				    ,error: function(index, upload){						//执行上传请求出现异常的回调(一般为网络异常、URL 404等)。返回两个参数,分别为:index(当前文件的索引)、upload(重新上传的方法)
				      //请求异常回调
				    }
				});
			}
	}
	
	//扩展jquery类方法
	$.extend({
		renderUpload : function(options){
			debugger;
			return new renderUpload(options);
		}
	});
})(jQuery);


使用

 var ShowAd = CardPager.extend({
	init: function(filter, url){
		this._super(filter, url);
		//界面需要引用的插件
		this.plugins = ['element', 'form', 'layedit', 'upload', 'laydate', 'layer'];
		this.primaryKey = "adId";
		this.primaryValue = $.QueryString("entityId");
		this.dataUrl = CONTEXT_PATH + '/ad/get?companyId='+$("input:hidden[name='companyId']").val();
		this.entityName = "ad";
	},
	initLayuiPlugin: function(){
		this._super(); 
		var _self = this;
		_self.files = null;
		$.renderSelector({
			fieldCode:"columnAdTreeId",
			area: ['25%','80%']
		});
		$.renderSelector({
			fieldCode:"companyId",
			area: ['25%','80%']
		});
/*		//执行实例
		$.renderUpload({
			fieldName : "上传附件",							//业务字段名称
	    	fieldCode : "dealPicture",						//业务字段编码
	    	entityName : "ad",						//业务实体
	    	selfFiles : _self.files
		});*/
		
		layui.laydate.render({
			elem: '#newsDate'
		});
		
	},
	initEvent: function(){
		var companyId = $("input:hidden[name='companyId']").val();
		$("#oweColumnId").val(window.parent.$("#selectOrg").val());
		$("#oweColumnName").val(window.parent.$("#selectOrgName").val());
		this._super();
		var _self = this;
		
		layui.use('upload', function(){
			  var upload = layui.upload;
			  var that = new Object();
			  that.settings = {};
			  that.settings.bindAction="#dealPicture_Action";
			  that.settings.elem="#dealPicture";
			  that.settings.entityName="ad";
			  that.settings.fieldCode="dealPicture";
              that.settings.fieldName="上传附件";
              that.settings.layuiUploadPreview="#dealPicture_preview";
              that.settings.previewTableBody = "#dealPicture_Preview_Table";
              that.settings.selfFiles = null;
              that.settings.url="/attach/upload";
			  //执行实例
			  var uploadInst = upload.render({
				    elem: that.settings.elem											//绑定元素
				    ,url: CONTEXT_PATH + that.settings.url 									//上传接口
				    ,accept:'file'
				    ,data:{																	//上传参数
				    	"entityName" : that.settings.entityName,							//业务实体
				    	"fieldCode" : that.settings.fieldCode,								//业务字段编码
				    	"fieldName" : that.settings.fieldName,								//业务字段名称
				    }								
				  	,auto:false												//是否选完文件后自动上传	如果设定 false,那么需要设置 bindAction 参数来指向一个其它按钮提交上传
				  	,size:0													//设置文件最大可允许上传的大小,单位 KB。不支持ie8/9;	0(即不限制)
				  	,multiple:true
				  	//是否允许多文件上传。设置 true即可开启。不支持ie8/9
				  	,bindAction: that.settings.bindAction					//指向一个按钮触发上传,一般配合 auto: false 来使用。值为选择器或DOM对象,如:bindAction: '#btn'
				    ,choose: function(res){									//选择文件后的回调函数
				    	var layIndex = layer.open({
				        	type: 1,
				        	title: "预览",
				        	maxmin: false,
				        	area : ['40%', '40%'],
				        	content:$(that.settings.layuiUploadPreview).removeAttr('style'),			//$.loadHtml(preUrl),
				        	success: function(layero){
				        		var demoListView = $(that.settings.previewTableBody).empty();
				        		var files = that.settings.selfFiles = res.pushFile(); //将每次选择的文件追加到文件队列
				        	      //读取本地文件
				        		res.preview(function(index, file, result){
				        			if((file.size/1024)>1024){
				        				layer.msg('上传的附件不能超过1M', {icon: 5});
				        				that.settings.selfFiles=null;
				        				delete files[index];
				        				layer.close(layIndex);
				        				return false;
				        			}
				        	        var tr = $(['<tr id="upload-'+ index +'">'
				        	          ,'<td>'+ file.name +'</td>'
				        	          ,'<td>'+ (file.size/1024).toFixed(1) +' kb</td>'
				        	          ,'<td name="upload-status">等待上传</td>'
				        	          ,'<td>'
				        	            ,'<button class="layui-btn layui-btn-mini demo-reload layui-hide">重传</button>'
				        	            ,'<button class="layui-btn layui-btn-mini layui-btn-danger demo-delete">删除</button>'
				        	          ,'</td>'
				        	        ,'</tr>'].join(''));
				        	        
				        	        //单个重传
				        	        tr.find('.demo-reload').on('click', function(){
				        	        	res.upload(index, file);
				        	        });
				        	        
				        	        //删除
				        	        tr.find('.demo-delete').on('click', function(){
				        	        	
					        	        delete files[index]; //删除对应的文件
					        	        tr.remove();
					        	        uploadInst.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
					        	        if(Object.getOwnPropertyNames(files).length == 0){			//当上传预览没有文件时,关闭弹出框
					        	        	 layer.close(layIndex);
					        	        }
				        	        });
				        	        demoListView.append(tr);
				        	      });
				        	},
				        	end : function(){	//layer销毁回调
				        		$(that.settings.layuiUploadPreview).attr('style','display:none;');
				        		$(that.settings.previewTableBody).empty();
				        	},
				        	cancel: function(){ 		  //右上角关闭回调
				        	}
				        });
				    	
				    }
				  	,before: function(res){					//文件提交上传前的回调
				  		$("tr",$(that.settings.previewTableBody)).find("td[name='upload-status']").text("上传中...");
				  	}
				    ,done: function(res, index, upload){					//执行上传请求后的回调。返回三个参数,分别为:res(服务端响应信息)、index(当前文件的索引)、upload(重新上传的方法,一般在文件上传失败后使用)
				    	//上传完毕回调		"dealPicture_list_table"
				    	if(res && res.status == WebConst.SUCCESS){
				    		$(that.settings.bindAction).text("").text("上传成功");
				    		delete that.settings.selfFiles[index];
				    		//改变预览状态,将上传附件id存在	隐藏域中
				    		$("tr[id='upload-"+ index +"']",$(that.settings.previewTableBody)).find("td[name='upload-status']").text("附件缓存完毕,请点击提交上传附件");
				    		var unupload = $("#uploadAttachmentIds").data("uploadAttachmentIds");
				    		if(unupload){
				    			unupload.push(res.data['attachmentId']);
				    			$("#uploadAttachmentIds").data("uploadAttachmentIds",unupload);
				    		}else{
				    			if(res.data){
				    				$("#uploadAttachmentIds").data("uploadAttachmentIds",[res.data['attachmentId']]);
				    				/**
				    				 * 第一个方法赋不了值,通过下面的赋值
				    				 */
				    				$("#uploadAttachmentIds").val([res.data['attachmentId']]);
				    			}
				    		}
				    		
				    		//处理卡片页面列表展示问题
				    		var afile = res.data;
				    		var attachImg = "";
				    		if(!$.isEmptyStr(afile.fileName) && (afile.fileName.indexOf('docx')!=-1 
									 || afile.fileName.indexOf('doc')!=-1))
							 {
								 //attachImg = '<td><img src="' + CONTEXT_PATH +"platform/common/images/word.png" /></td>';
								 attachImg = '<td><img src="'+CONTEXT_PATH+ '/platform/common/images/word.png"' +'width="100" height="60" style="cursor:pointer;"/></td>';
							 }
							 else if(!$.isEmptyStr(afile.fileName) && afile.fileName.indexOf('pdf')!=-1)
							 {
								 attachImg = '<td><img src="'+CONTEXT_PATH+ '/platform/common/images/pdf.png"' +'width="100" height="60" style="cursor:pointer;"/></td>';
							 }
							 else
							 {
								 attachImg = '<td><img src="' + CONTEXT_PATH + '/attach/showPicture?attachmentId=' 
				          		 + afile.attachmentId + '&isThumbnail=true" max-width="120" width="100" height="60" style="cursor:pointer;"/></td>';
							 }
				    		var $tr = $(['<tr id="upload-'+ afile.attachmentId +'" attatchmentId="'+ afile.attachmentId +'">'
						          , attachImg
						          ,'<td>'+ afile.fileName +'</td>'
						          ,'<td>'+ afile.fileSize +' kb</td>'
						          ,'<td>'+ afile.createDate +'</td>'
						          ,'<td>'
						            ,'<a class="layui-btn layui-btn-mini demo-reload" href="'+  CONTEXT_PATH +'/attach/download?attachmentId='+ afile.attachmentId +'">下载</a>&nbsp;&nbsp;'
						            ,'<button class="layui-btn layui-btn-mini layui-btn-danger">删除</button>'
						          ,'</td>'
						        ,'</tr>'].join(''));
							  	$tr.find('button').on('click',function(){
							  		var attId = $(this).closest("tr").attr('attatchmentId');
							  		var url = CONTEXT_PATH + '/attach/delete/datafile';
							  		var rlt = $.getData(url,{'attachmentIds':attId});
									if(rlt && rlt.status == WebConst.SUCCESS){
										  $(this).closest("tr").remove();
										  $("#uploadAttachmentIds").data("uploadAttachmentIds").removeByValue(attId);
									  }
									return false;
							  	});
							  $("#" + afile.fieldCode + "_list_table").append($tr);
				    	}
				    }
			    ,error: function(index, upload){						//执行上传请求出现异常的回调(一般为网络异常、URL 404等)。返回两个参数,分别为:index(当前文件的索引)、upload(重新上传的方法)
			      //请求异常回调
			    }
			  });
			});
		
		layui.form.on('submit(ad)', function(data){
			//处理 	KindEditor 富文本取值问题
			var formDoms = data["form"];
			for(i=0,len=formDoms.length; i<len; i++){
				var idom = data["form"][i],
					idomName = data["form"][i].name,
					tagName = idom.tagName,
					idomId = data["form"][i].id,
					keditor = _self[idomName];
				if(idom.tagName == "TEXTAREA" && keditor){
					keditor.sync();
					data.field[idomName]=base64.encode($('#'+idomId ).val());
				}
			}
			var retData = $.getData(_self.url, data.field);
			
			if(retData.status!=1000 || retData.status == WebConst.FAIL){
				layer.msg('保存失败', {icon: 5});
				return false;
			}
			//如果有附件,上传附件
			var uploadAttachmentIds = $("#uploadAttachmentIds").data("uploadAttachmentIds"),
				entityId = retData.data;
				$("input[name='"+ _self.primaryKey +"']").val(retData.data);
				if(!uploadAttachmentIds && data.field["uploadAttachmentIds"]){
					uploadAttachmentIds = data.field["uploadAttachmentIds"];
				}
			if(true && uploadAttachmentIds && entityId){
				var params = {};
				if(uploadAttachmentIds instanceof Array)
				{
                    params.attachmentIds = uploadAttachmentIds.join(",");
				}
				else
				{
                    params.attachmentIds = uploadAttachmentIds;
				}
				params.entityId = entityId;
				$.getData(CONTEXT_PATH + "/attach/updateEntityId", params);
			}
			 $("#uploadAttachmentIds").data("uploadAttachmentIds",null);
			//新增之前回调函数
			if(_self.afterSave && $.isFunction(_self.afterSave)){
				_self.afterSave(retData);
			}else{
				layer.msg('保存成功', {icon: 6});
			}
			return false;
		});
		layui.form.on('submit(preAd)', function(data){
			//处理 	KindEditor 富文本取值问题
			var formDoms = data["form"];
			for(i=0,len=formDoms.length; i<len; i++){
				var idom = data["form"][i],
					idomName = data["form"][i].name,
					tagName = idom.tagName,
					idomId = data["form"][i].id,
					keditor = _self[idomName];
				if(idom.tagName == "TEXTAREA" && keditor){
					keditor.sync();
					data.field[idomName]=$('#'+idomId ).val();
				}
			}
			//如果有附件,上传附件
			var uploadAttachmentIds = $("#uploadAttachmentIds").data("uploadAttachmentIds"),
				
			params = {};
			if(uploadAttachmentIds instanceof Array)
			{
                params.attachmentIds = uploadAttachmentIds.join(",");
			}
			else
			{
                params.attachmentIds = uploadAttachmentIds;
			}
			
			$.getData(CONTEXT_PATH + "/attach/updateEntityId", params);
			writeCookie("adImges", JSON.stringify(params), 1);
			
			writeCookie("ad", JSON.stringify(data.field), 1);
			
			layer.open({
				  type: 2,
			      title: "预览",
			      maxmin: true,
				  shadeClose: true, //开启遮罩关闭
				  area: ['100%','100%'],
			      content:CONTEXT_PATH+"/ad/preAd"
			});
		});
		
	},
	initThirdPlugin: function(){
		var _self = this;
		KindEditor.ready(function(K) {
			_self.content = K.create('#content',{
				uploadJson: CONTEXT_PATH+'/kindeditor/uploadFile',//指定上传图片的服务器端程序
				fileManagerJson: CONTEXT_PATH+'/kindeditor/list?fieldCode=kind_image',//指定浏览远程图片的服务器端程序
				allowFileManager: true
			});
			/*$("span[title='批量图片上传']").remove();*/
		});
	}
});

$(function(){
	showAd = new ShowAd('ad', CONTEXT_PATH + '/ad/save');
	showAd.render(function(data,_self){
		layui.form.on('submit(' + _self.filter + ')', function(data){
			//处理 	KindEditor 富文本取值问题
			var formDoms = data["form"];
			for(i=0,len=formDoms.length; i<len; i++){
				var idom = data["form"][i],
					idomName = data["form"][i].name,
					tagName = idom.tagName,
					idomId = data["form"][i].id,
					keditor = _self[idomName];
				if(idom.tagName == "TEXTAREA" && keditor){
					keditor.sync();
					data.field[idomName]=base64.encode($('#'+idomId ).val());
				}
			}
			var retData = $.getData(_self.url, data.field);
			if(retData.status!=1000 || retData.status == WebConst.FAIL){
				if(!$.isEmptyStr(retData.message))
				{
					layer.msg(retData.message, {icon: 5});
					return false;
				}
				layer.msg('保存失败', {icon: 5});
				return false;
			}
			//如果有附件,上传附件
			var uploadAttachmentIds = $("#uploadAttachmentIds").data("uploadAttachmentIds"),
				entityId = retData.data;
				$("input[name='"+ _self.primaryKey +"']").val(retData.data);
				if(!uploadAttachmentIds && data.field["uploadAttachmentIds"]){
					uploadAttachmentIds = data.field["uploadAttachmentIds"];
				}
			if(true && uploadAttachmentIds && entityId){
				var params = {};
				if(uploadAttachmentIds instanceof Array)
				{
                    params.attachmentIds = uploadAttachmentIds.join(",");
				}
				else
				{
                    params.attachmentIds = uploadAttachmentIds;
				}
				params.entityId = entityId;
				$.getData(CONTEXT_PATH + "/attach/updateEntityId", params);
			}
			 $("#uploadAttachmentIds").data("uploadAttachmentIds",null);
			//新增之前回调函数
			if(_self.afterSave && $.isFunction(_self.afterSave)){
				_self.afterSave(retData);
			}else{
				layer.msg('保存成功', {icon: 6});
			}
			return false;
		});
	});
	//关闭卡片页面之前回调
	function beforeClose (){
		//如果涉及到文件上传,关闭卡片页面将未上传的附件进行删除
		var unuploadFiles = $("#uploadAttachmentIds").data("uploadAttachmentIds");
		if(unuploadFiles && unuploadFiles.length>0){
			var url = CONTEXT_PATH + '/attach/delete/datafile';
			$.getData(url,{'attachmentIds':unuploadFiles.join(",")});
		}
	}
	
});

$("#dealPicture").mouseover(function(){
	var tbodyLength = $(this).siblings().find("tbody[id='dealPicture_list_table']").find("tr")
	var flag = true;
	if($(tbodyLength).length==0){
		flag = false;
	}

	if(flag){
		$(".layui-input-block button[id='dealPicture']").off('click').on('click',a) }
	 if(!flag){
		$(".layui-input-block button[id='dealPicture']").off('click',a).on('click',upload);
		$("#dealPicture").trigger('click');
	 }

})

function a(){
		layer.msg("附件仅能上传一个");
	};
	function upload(){

	}
	
function readCookie (name)
{
    var cookieValue = "";
    var search = name + "=";
    if (document.cookie.length > 0)
    {
        offset = document.cookie.indexOf (search);
        if (offset != -1)
        {
            offset += search.length;
            end = document.cookie.indexOf (";", offset);
            if (end == -1)
                end = document.cookie.length;
            cookieValue = unescape (document.cookie.substring (offset, end))
        }
    }
    return cookieValue;
}
function writeCookie (name, value, hours){
    var expire = "";
    if (hours != null)
    {
        expire = new Date ((new Date ()).getTime () + hours * 3600000);
        expire = "; expires=" + expire.toGMTString ();
    }
    document.cookie = name + "=" + escape (value) + expire;
}

layui组件初始化

(function(scope){
	var CardPager = Class.extend({
		init: function(filter, url){
			this.filter = filter;
			this.url = url;
		},
		render: function(afterRender){
			var _self = this;
			_self.initThirdPlugin(); 		//初始化第三放插件
			
			//plugins 这个可以不传,但是请不要传空数组过来
			var plugins = _self.plugins || ['form'];
			layui.use(plugins,function(){
				_self.initEvent();
				_self.initLayuiPlugin();	//初始化layui组件		
				//渲染表单数据
				var params = {};
					params[_self.primaryKey] = _self.primaryValue;
				$.ajaxReq(_self.dataUrl, params, function(data){
					if(data && data.status == WebConst.SUCCESS && data.data){
						var cardForm = $("#"+_self.filter+"Form"),
							formDoms = cardForm[0];
						cardForm.setValues(data.data);
						//处理富文本赋值问题
						for(i=0,len=formDoms.length; i<len; i++){
							var idom = formDoms[i],
								idomName = idom.name,
								tagName = idom.tagName,
								idomId = idom.id,
								keditor = _self[idomName];
							if(idom.tagName == "TEXTAREA" && keditor){
								keditor.html(data.data[idomName]);
							}
						}	
						layui.form.render();
					}
					if(afterRender){
						afterRender(data,_self);
					}
				},WebConst.AJAX_FORM,null,false);
				
				
			});
			
			_self.initFiles();
		},
		
		initFiles: function(){
			var _self = this,
				attachParam = {};
				attachParam.entityId = _self.primaryValue;
				attachParam.entityName = _self.entityName;
			$.ajaxReq(CONTEXT_PATH + "/attach/entity/files", attachParam, function(data){
				if(data && data.status == WebConst.SUCCESS && data.data){
					var files = data.data;
					$("div[class='layui-upload']").each(function(index,obj){
						var containerId = $(obj).attr('id'),
							attachField = containerId.split("_")[0],
							tableBody = containerId + "_table";
						for(var i=0,len=files.length; i<len; i++){
							var cFile = files[i];
							if(cFile.fieldCode == attachField){
								 var attachImg = "";
								 if(!$.isEmptyStr(cFile.fileName) && (cFile.fileName.indexOf('docx')!=-1 
										 || cFile.fileName.indexOf('doc')!=-1))
								 {
									 //attachImg = '<td><img src="' + CONTEXT_PATH +"platform/common/images/word.png" /></td>';
									 attachImg = '<td><img src="'+CONTEXT_PATH+ '/platform/common/images/word.png"' +'width="100" height="60" style="cursor:pointer;"/></td>';
								 }
								 else if(!$.isEmptyStr(cFile.fileName) && cFile.fileName.indexOf('pdf')!=-1)
								 {
									 attachImg = '<td><img src="'+CONTEXT_PATH+ '/platform/common/images/pdf.png"' +'width="100" height="60" style="cursor:pointer;"/></td>';
								 }
								 else
								 {
									 attachImg = '<td><img src="' + CONTEXT_PATH + '/attach/showPicture?attachmentId=' 
					          		 + cFile.attachmentId + '&isThumbnail=true" width="100" height="60" style="cursor:pointer;"/></td>';
								 }
								 var $tr = $(['<tr id="upload-'+ cFile.attachmentId +'" attatchmentId="'+ cFile.attachmentId +'">'
							          , attachImg
							          ,'<td>'+ cFile.fileName +'</td>'
							          ,'<td>'+ cFile.fileSize +' kb</td>'
							          ,'<td>'+ cFile.createDate +'</td>'
							          ,'<td>'
							            ,'<a class="layui-btn layui-btn-mini demo-reload" href="'+  CONTEXT_PATH +'/attach/download?attachmentId='+ cFile.attachmentId +'">下载</a>&nbsp;&nbsp;'
							            ,'<button class="layui-btn layui-btn-mini layui-btn-danger">删除</button>'
							          ,'</td>'
							        ,'</tr>'].join(''));
								  $tr.find('button').on('click',function(){
									  var rlt = $.getData(CONTEXT_PATH + "/attach/delete/updflag",{'attachmentId':$(this).closest("tr").attr('attatchmentId')});
									  if(rlt && rlt.status == '1000'){
										  $(this).closest("tr").remove();
									  }
									  return false;
								  });
								 $("#" + tableBody).append($tr);
							}
						}
					})
				}
			},WebConst.AJAX_FORM,null,false);
		},
		initThirdPlugin: function(){
			
		},
		initLayuiPlugin: function(){
			debugger;
			var _self = this;
		},
		initEvent: function(){
			debugger;
			var _self = this;
			layui.form.on('submit(' + _self.filter + ')', function(data){
				//处理 	KindEditor 富文本取值问题
				var formDoms = data["form"];
				for(i=0,len=formDoms.length; i<len; i++){
					var idom = data["form"][i],
						idomName = data["form"][i].name,
						tagName = idom.tagName,
						idomId = data["form"][i].id,
						keditor = _self[idomName];
					if(idom.tagName == "TEXTAREA" && keditor){
						keditor.sync();
						data.field[idomName]=base64.encode($('#'+idomId ).val());
					}
				}
				var retData = $.getData(_self.url, data.field);
				
				if(retData.status!=1000 || retData.status == WebConst.FAIL){
					if(!$.isEmptyStr(retData.message))
					{
						layer.msg(retData.message, {icon: 5});
						return false;
					}
					layer.msg('保存失败', {icon: 5});
					return false;
				}
				//如果有附件,上传附件
				var uploadAttachmentIds = $("#uploadAttachmentIds").data("uploadAttachmentIds"),
					entityId = retData.data;
					$("input[name='"+ _self.primaryKey +"']").val(retData.data);
					if(!uploadAttachmentIds && data.field["uploadAttachmentIds"]){
						uploadAttachmentIds = data.field["uploadAttachmentIds"];
					}
				if(true && uploadAttachmentIds && entityId){
					var params = {};
					if(uploadAttachmentIds instanceof Array)
					{
                        params.attachmentIds = uploadAttachmentIds.join(",");
					}
					else
					{
                        params.attachmentIds = uploadAttachmentIds;
					}
					params.entityId = entityId;
					$.getData(CONTEXT_PATH + "/attach/updateEntityId", params);
				}
				 $("#uploadAttachmentIds").data("uploadAttachmentIds",null);
				//新增之前回调函数
				if(_self.afterSave && $.isFunction(_self.afterSave)){
					_self.afterSave(retData);
				}else{
					layer.msg('保存成功', {icon: 6});
				}
				return false;
			});
			if (_self.act == "read") {
				$("#images_list_table").find("td").eq(4).text("");//隐藏附件的下载和删除按钮
			}
		}
	});
	scope.CardPager = CardPager;
})(window);

定义公共父类

(function(){
  //initializing是为了解决我们之前说的继承导致原型有多余参数的问题。当我们直接将父类的实例赋值给子类原型时。是会调用一次父类的构造函数的。所以这边会把真正的构造流程放到init函数里面,通过initializing来表示当前是不是处于构造原型阶段,为true的话就不会调用init。
  //fnTest用来匹配代码里面有没有使用super关键字。对于一些浏览器`function(){xyz;}`会生成个字符串,并且会把里面的代码弄出来,有的浏览器就不会。`/xyz/.test(function(){xyz;})`为true代表浏览器支持看到函数的内部代码,所以用`/\b_super\b/`来匹配。如果不行,就不管三七二十一。所有的函数都算有super关键字,于是就是个必定匹配的正则。
  var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
 
  // The base Class implementation (does nothing)
  // 超级父类
  this.Class = function(){};
 
  // Create a new Class that inherits from this class
  // 生成一个类,这个类会具有extend方法用于继续继承下去
  Class.extend = function(prop) {
    //保留当前类,一般是父类的原型
    //this指向父类。初次时指向Class超级父类
    var _super = this.prototype;
   
    // Instantiate a base class (but only create the instance,
    // don't run the init constructor)
    //开关 用来使原型赋值时不调用真正的构成流程
    initializing = true;
    var prototype = new this();
    initializing = false;
   
    // Copy the properties over onto the new prototype
    for (var name in prop) {
      // Check if we're overwriting an existing function
      //这边其实就是很简单的将prop的属性混入到子类的原型上。如果是函数我们就要做一些特殊处理
      prototype[name] = typeof prop[name] == "function" &&
        typeof _super[name] == "function" && fnTest.test(prop[name]) ?
        (function(name, fn){
          //通过闭包,返回一个新的操作函数.在外面包一层,这样我们可以做些额外的处理
          return function() {
            var tmp = this._super;
           
            // Add a new ._super() method that is the same method
            // but on the super-class
            // 调用一个函数时,会给this注入一个_super方法用来调用父类的同名方法
            this._super = _super[name];
           
            // The method only need to be bound temporarily, so we
            // remove it when we're done executing
            //因为上面的赋值,是的这边的fn里面可以通过_super调用到父类同名方法
            var ret = fn.apply(this, arguments);  
            //离开时 保存现场环境,恢复值。
            this._super = tmp;
           
            return ret;
          };
        })(name, prop[name]) :
        prop[name];
    }
    // 这边是返回的类,其实就是我们返回的子类
    function Class() {
      // All construction is actually done in the init method
      if ( !initializing && this.init )
        this.init.apply(this, arguments);
    }
   
    // 赋值原型链,完成继承
    Class.prototype = prototype;
   
    // 改变constructor引用
    Class.prototype.constructor = Class;
 
    // 为子类也添加extend方法
    Class.extend = arguments.callee;
   
    return Class;
  };
})();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$.extend插件的开发与代码的编写 的相关文章

  • 多光谱遥感分类

    多光谱遥感分类 数据集制作 SAE调参 预测 数据集制作 本次实验是多分类 9分类 训练 验证 测试数据来自人工标记的区域 用ArcGIS生成每个点的X Y地理坐标后算出像素的相对位置 data x round data X 331718
  • Umi4 从零开始实现动态路由、动态菜单

    Umi4 从零开始实现动态路由 动态菜单 前言 前期准备 数据表 Mock数据 定义类型 开始 获取路由信息 patchRoutes routes routeComponents 生成动态路由所需的数据 formattedRoutePath
  • Unity(使用GUI制作第一人称鼠标准星)

    属性 简介 方法 注意 准星一般都放在屏幕正中央 所以屏幕的 宽高 2 可得中心点 屏幕宽度 Screen Width 屏幕高度 Screen Height 矩形宽度 自己声明的变量这里使用W代替 矩形高度 自己声明的变量这里使用H代替 准
  • 全国大学生物联网设计竞赛作品

    本文分享自中移OneOS微信公众号 全国大学生物联网设计竞赛优秀作品巡展 陪你长大 智慧养鸡小助手 近几年 鸡福利养殖越来越受关注 表现动物的天性是动物福利定义之一 保证家鸡有合适的活动空间和足够的有氧运动 才能保证拥有动物的天性 对家鸡的
  • 前端项目上线优化

    1 格式化代码 使用eslint 代码检查代码的格式 vs code 想要格式化 vue 文件 需要安装 vetur插件 可以格式化代码并且变成彩色 atl shif f快捷键 vetur格式化格式化代码 还是不符合 eslint 规范 字

随机推荐

  • Docker容器应用日志查看

    docker attach命令 docker attach options 容器会连接到正在运行的容器 然后将容器的标准输入 输出和错误流信息附在本地打印出来 命令中options的取值有三种 detach keys no stdin si
  • 墨盒和墨仓打印机区别?

    打印机有激光打印机 喷墨打印机 针式打印机等多个种类 其中日常文件打印最长使用到的就是激光打印机和喷墨打印机 喷墨打印机分两种类 1 墨仓式喷墨打印机 2 墨盒式喷墨打印机 1 供墨方式不一样 墨盒式喷墨打印机 使用的是独立的墨盒装入打印机
  • 正大新闻:炒期货巨亏7000万引股价大跌豪悦护理回购+增持

    昨日晚间 上市公司豪悦护理发布公告称 拟以1 4亿元 2亿元回购股份 回购价格不超过75元 股 另外 其控股股东 实际控制人李志彪拟3个月内增持2000万元 5000万元 值得注意的是 通过近几日的公告可以发现 此次回购或为豪悦护理对近日因
  • 想要设计自己的微服务?看这篇文章就对了

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由我就静静地看 发表于云 社区专栏 本文通过使用Spring Boot Spring Cloud和Docker构建的概念验证应用程序的示例 为了解常见的微服务架构模式提供了一个起
  • 前端练手项目合集40.0个,附源码,2022年最新

    今天分享40个博主平时收集整理的前端练手项目 都是一些适合前端新手的小项目合集 1 网易云音乐首页制作 2 实战项目之今日头条 3 实战项目之拉勾网 4 ReactNative项目之美食APP 5 uni APP项目实战教程 6 React
  • 测试人员掌握基本Linux命令——查看日志(实时日志)

    很多初级测试人员 在进行执行测试用例这个步骤时 发现bug 不能更加的准确去定位bug 在这样的情况下就可以打开Linux服务器 敲命令查看操作进行中的实时日志 当系统报错时 可以截图日志在缺陷管理系统中 开发人员就知道什么地方错了 操作步
  • rocksdb原理_ceph性能调优历程-rocksdb篇(1)

    最近调优及其他工作实在太忙 没有太多时间写心得 今天抽空来总结一下阶段性成果吧 从一开始的ceph调研 系统调优开始 ceph集群存储大规模数据之后 集群文件数超过2亿 rgw并发写性能下降的问题一直困扰我们 终于在最近找到了原因及相关解决
  • C++primer Plus 第七章复习题

    1 使用函数的3个步骤是什么 定义函数 提供原型 调用函数 2 请创建与下面的描述匹配的函数原型 igor 没有参数 且没有返回值 void igor tofu 接受一个int参数 并返回一个float float tofu int mpg
  • 去除discuz手机版链接&mobile=2后缀

    discuz手机版链接自动添加 mobile 2 导致百度收录的手机版链接无法打开 解决思路 1 打开 source class helper helper mobile php文件搜索下面代码 约在22行 content preg rep
  • malloc的底层实现(ptmalloc)

    前言 本文主要介绍了ptmalloc对于内存分配的管理 结合网上的一些文章和个人的理解 对ptmalloc的实现原理做一些总结 内存布局 介绍ptmalloc之前 我们先了解一下内存布局 以x86的32位系统为例 从上图可以看到 栈至顶向下
  • 【深度学习】_amax() got an unexpected keyword argument ‘dim‘ 解决方案

    在定义一个点云数据pc后 想使用pc max dim 0 然后出现了 amax got an unexpected keyword argument dim 这个是因为对于tensor类型的数据和ndarray类型的数据都有一个max mi
  • 彻底搞懂字符编码ASCII,GB2312,UNICODE,UTF-8

    文章目录 基础 什么是字符编码 正文 ASCII ASCII扩展码 GB2312 GBK DBCS UNICODE UTF 8 UTF 16 USC 2 UTF 32 USC 4 编程语言对字符编码的支持 阅读了一篇关于编码的博客 点击打开
  • Matlab实现PSO算法(附上10个完整仿真源码)

    PSO Particle Swarm Optimization 是一种优化算法 它模拟了鸟群或鱼群等动物的集体行为 通过群体智能的方式来解决优化问题 PSO算法最初由Kennedy和Eberhart在1995年提出 近年来得到了广泛的应用
  • 区块链上的订阅

    为分散式应用程式 以太坊 实施订阅模型 Luca Bravo在Unsplash上拍摄的背景照片 以太坊徽标 火种金标志 介绍 您可能已经听说过 去中心化的应用程序将成为互联网的未来 为了使这个分散的生态系统蓬勃发展并可持续发展 我们将需要许
  • 人工智能数学基础---定积分2:定积分的性质

    一 引言 在 人工智能数学基础 定积分1 定积分的概念以及近似计算 介绍了定积分的概念 几何意义 用定义来求定积分的案例以及使用矩形法 梯形法和抛物线法求定积分近似值的方法和案例等基础知识 根据上文的介绍 结合相关知识补充如下2条规则 可以
  • #pragma once 与#ifndef 的区别解析

    原文地址 http blog csdn net hkx1n article details 4313303 作用 为了避免同一个文件被include多次 C C 中有两种方式 一种是 ifndef方式 一种是 pragma once方式 在
  • linux 查看文件的inode使用情况

    linux 查看文件的inode使用情况 查看文件的空间使用情况 root racdb01 df h Filesystem Size Used Avail Use Mounted on dev mapper vg lgoracle lv r
  • Hutool工具BeanUtil.copyProperties实现自定义类型转换器之字符串转时间格式化

    hutool工具BeanUtil copyProperties在字符串转LocalDateTime时默认用的格式为yyyy MM ddTHH mm ss 所以需要自定义转换器才行 在转换时会优先使用自定义的 在项目启动时执行一次此段代码即可
  • Vue-cli 与Vite 环境搭建与项目构建

    Vue cli 与Vite 环境搭建与项目构建 在之前的语法演示中 我们直接使用 script 引入 Vue 3 从而在浏览器里实现了所有调试功能 但是在实际的项目中 我们会使用专门的调试工具 在项目上线之前 代码也需要打包压缩 并且考虑到
  • $.extend插件的开发与代码的编写

    extend插件的开发与代码的编写 extend item 该方法是将item合并到Jquery的全局对象中去 相当于为Jquery全局对象添加了一个静态方法 extend SayHello function value alert hel