前端(EasyUI -1.4.1)躺坑之旅

      作为一个蹩脚前端,已经接触过一段时间EasyUI了,这个框架其实很老了,基本都是一些原生JS操作。我也只能一葫芦画瓢了,有些前端的原理其实并不是那么的理解,但是一般来说基本还是能搞定的,百度下,copy下。这边就记录下一些坑,以便日后查看,也有个借鉴。


  DataGrid 组件 

定义 表 :<table id="id" style="width: auto; height: 100%"></table>  

工具栏定义  <div id="toolbar_id" style="padding: 2px 2px; position: relative;"></div>
$("#id").datagrid({   //指定ID
                method : 'post',    ---  请求方式
                url : 'xxxx',       -- 路径
                fitColumns : false, 
                border : true,
                pagination : true,
                idField : 'noticeId',
                pageSize : 30,
                pageList : [ 30, 40, 50, 60, 70 ],
                rownumbers : true,
                singleSelect : true,
                collapsible : true,
                striped : true,
                remoteSort : true,
                queryParams : {  -- 默认请求参数
                    xxx: xx,
                    yyy : yy
                },
               view:detailview,
		       detailFormatter:function(index,row){
               return '<div style="padding:2px"><table id="ddv-' + index + '"></table> 
                </div>';
               },
                onLoadSuccess:  function,  -- 请求成功之后
                toolbar : '#toolbar_id', -- 工具栏
                frozenColumns : [ [ {
                    title : '字段描述',   -- 描述
                    field : 'xxx',
                    hidden : true,
                    width : 120,
                    align : 'center',
                    halign : 'center',
                    sortable : true
                    },
                    ...
                    ]]

});
//1、动态修改URL
var op = $("#id").datagrid("options");//获取 option设置对象
 op.url = url;
// 重新加载 带参数parms{a:a,b:b}
$('#id').datagrid('reload', parms); 
//2、动态修改字段 colums =[[{..}]];
$("#id").datagrid({columns:colums});

ComBox组件  异步请求加载数据

<input id="id" class="easyui-combobox" style="width:80px;"  data-options="editable:false ;panelHeight:'auto'" 
  /> 
var data; // 异步请求
$.ajax({    
		method:'get',
        url:'xxx',    
        dataType : 'json',    
        type : 'POST',    
        async:false,  
        success: function (data){    
        	data = data;  
        }    
  	}); 

$("#id").combobox({
		prompt:'输入关键字后自动搜索',
		method:'get',
	    url:'xxx',
	    editable:true,
	    valueField:'value',  // 传入后台的值
	    textField:'text',   // 前端展示的值
        onChange:function(value) { // 监听值改变时的方法
        },
        loadFilter:function(data) { // 数据过滤
			var d = [];
			for (var i = 1; i < data.length; i++){
				if(){ // 频道条件
				 d.push(date);
				}
			}
			return d;
		 },
	     onLoadSuccess:function(){
	    	var data = $('#id').combobox('getData');
	    	$("#id").combobox('select',data[0].value); // 设置默认值
	    }
	});

   $("#id").combotree({ // 多选
		method:'get',
	    url:'xxx',
	    editable:false,
	    checkbox:true,
		multiple: true,
		loadFilter:function(data) {
		}
	}); 

combox 加载数据的方式 (不是提前加载出来,而是根据客户的输入去后台请求在渲染组件的)

// 第一种方式
function comboxDateLoad1(param, success, error) {
		    //获取combobox输入的值
		    var q = param.q;
		    if (q == undefined || q == "" || q == null)
		        return false;
		    $.ajax({
		        url: "xxx",
		        type: "get",
		        success: function (data) {
		            //执行loader的success回调函数(装载数据)
		            success(data);
		            console.log(data)
		        },
		        //异常处理
		        error: function (xml, text, msg) {
		            error.apply(this, arguments);
		        }
		    });
		}
// 第二种方式
function comboxDateLoad2(param, success, error) {
	    //获取combobox输入的值
	    var q = param.q;
	    var field2= $("#field2").combobox('getValue');
	    if (q == undefined || q == "" || q == null)
	        return false;
	    $.ajax({
	        url: "xxx",
	        type: "post",
	        data: { field1: q ,field2:field2},
	        dataType: "json",
	        success: function (data) {
	            //执行loader的success回调函数(装载数据)
	            success(data.rows);
	        },
	        //异常处理
	        error: function (xml, text, msg) {
	            error.apply(this, arguments);
	        }
	    });
	}
	
	$('#comboxId').combobox({
		prompt:'输入关键字后自动搜索',
		required:true,
		method:'get',
		url:'',
		mode: "remote",
		editable:true,
		valueField:'id',
		textField:'text',
		loader: comboxDateLoad, 
		filter: function(q, row){
			var opts = $(this).combobox('options');
			return row[opts.textField].indexOf(q) != -1;
		}
	});

combotree用法支持多选,而且可以控制同一个节点下的子节点只能勾选一次,不同的节点下的子节点可以允许多选

//树状下拉框列表 - 支持多选
$("#combotreeId").combotree({
		method:'post',
	    url:'xxx',
	    editable:false,
	    valueField:'id',
	    textField:'text',
	    lines: true,
	    multiple : true,//设置可以多选,显示多选框,不设置不会出现多选框  
	    checkbox:true,//显示多选框  
	    cascadeCheck:true,
	    onlyLeafCheck : true,//只在叶子节点显示多选框
	    onBeforeSelect:function(node){
            if(node.parentId<=0){ 
            	return false;
            }
        },
        onBeforeCheck : function(node, checked){//控制只能选一项
            if(checked){//当前为选中操作
                var nodes = $(this).tree("getChecked");
                //控制同一节点只能选一项,选中某一项后后面不能再勾选
                for(var i=0; i<nodes.length; i++){  
                	if(nodes[i].parentId == node.parentId){
                		 $(this).tree("uncheck", nodes[i].target);//清除之前选中的项	
                	}	
                } 
            }
        },onLoadSuccess:function(node,data){ // 去掉标签根节点的标签
        	$(".tree-icon,.tree-file").removeClass(" tree-file");
        }
});

// 获取所有勾选的子节点的ID的集合
function getTreeIds(){
		//获取当前选中的节点
		var doc = $('#combotreeId').combotree('tree'); 
	    var treeNodes = doc.tree('getChecked');// 获取树节点的值
		var treeIds = [];
		for(var i=0;i<treeNodes.length;i++){
			treeIds.push(treeNodes[i].id);
		}
		var treeIdsLst=treeIds.join(",");
	    return  treeIdsLst;
}

其他 提示消息框,带有确认按钮的,以及可以自定义按钮的提示框

 //  // 指定关闭对应的title页面 此方法用于<iframe>定义父页面
$.messager.confirm('确认',"msg",function(r){
				if(r){	
	 	     var jq = top.jQuery;   
		     jq('#id').tabs('close',title);
	      }
});
// 定义日期
<input id="id" class="Wdate"  onFocus="WdatePicker({readOnly:true,dateFmt:'yyyy-MM-dd'})" style="position:relative;border:1px solid #D3D3D3;background-color:#fff;width:80px;vertical-align: middle;border-radius:5px;"/>
// 定义展示弹出窗口
<div id ="win_id"></div>
$("#id").click(function(){ // 触发按钮
 			$("#win_id").show().dialog({  // 展示窗口
 				title: 'title',// 弹出窗口的title    
 			    width: 700,    
 			    height:750,    
 			    closed: false,    
 			    cache: false,    
 			    modal: true,
 			    left:400,
 			    top:40,
 			    onClose: function () {
 			    	// 关闭窗口 执行的操作
 	            },
 			    buttons: [{
 	                text: 'ok',
 	                iconCls: 'icon-ok',
 	                handler: function () {
 	                	// 执行的操作
 	                }
 			    },...]
 			});
		});

js控制文件上传,支持动态渲染等

<imput id="fileButton" class="easyui-linkbutton" style="margin-left:10px;" iconCls='icon-add' name="文件上传"/>
<input id="uploadFile" type="file" name="file" style="display:none" />
var files = []; // 用于存放上传的文件信息
// 第1步
$("#filebutton").click(function(){
 	$("#uploadFile").click();  // 触发添加文件 ,
 });
// 注意;在上传文件时,可能会触发file的change的事件,上次第二次可能导致change触发不了
// 第2步
$("#uploadFile").change(function(){
 	if (!validateFile("uploadFile")){  // 文件校验
 		return ;
 	}
 	uploadFile();
 });
function validateFile(id){ // 文件校验
 	var fileObject=$("#"+id); 
 	var filepath=fileObject.val(); 
 	var fileArr=filepath.split("//"); 
 	var fileTArr=fileArr[fileArr.length-1].toLowerCase().split("."); 
 	var filetype=fileTArr[fileTArr.length-1]; 
 	if(filetype!="xls"&&filetype!="txt"){  //指定校验的文件 如:txt,xls..
 			fileObject.focus(); 
 			//BootstrapDialog.show({title:'操作提示',message:"文件格式不合法"});
 			$.messager.alert("操作提示","仅支持xxx文件上传","warning");
 			var file = $("#"+id) ;
 			file.after(file.clone().val(""));      
 			file.remove(); 
 			return false;
 		}else{ 
 			return true;
 		} 
 	} 

// 上传文件  这个地方需要注意的是,需要引入js(ajaxfileupload.js,  网上应该有,我就暂不提供了) 该js中定义了ajaxFileUpload方法  ,这里直接用
// 注:  ajaxfileupload.js 版本没有定义返回json数据的获取(即返回的数据包含了标签,直接拿不到)
// 因此我修改了下,新增了一个类型,可以获取Json的数据 如下:
// 200行的地方新增了:------------
 if ( type == "tojson" ){  
        	//eval("data = \" "+data+" \" ");
      data = jQuery.parseJSON(jQuery(data).text());
  }
// ------------ 
function uploadFile(){
 		if (!validateFile("uploadFile")){
 				return ;
 		}	
 		var timestamp = {time:new Date().getTime()};
 		var obj = document.getElementById("uploadFile");
 		var name = obj.files[0].name;
 		// ajaxfileupload.js 新增 type = "tojson" 特殊逻辑 接收 json串
 		$.ajaxFileUpload({
 			url:'xxx',
 	 	    type:'post',
 	 	    data: timestamp,
 	 	    async:false,
 	        secureuri: false, //是否需要安全协议,一般设置为false
 	        fileElementId: 'uploadFile', //文件上传域的ID 
 	        dataType:'tojson',// json 获取不到json的数据,新增的tojson的类型
 	        success: function (data){  //服务器成功响应处理函数
 	               // 根据返回的data,进行其他操作
 	               	resetUploadFile(); // 清除缓存,防止第二次上传失效
 	               	...
 	              }
 	            },
 	        error: function (data, status, e)//服务器响应失败处理函数
 	            {
 	            	$.messager.alert("warning","上传失败:"+e);
	                return false;
 	            }
 	 	    });
 }
// 清除缓存
function resetUploadFile(){
			var file = $("#uploadFile");
			file.after(file.clone().val(""));      
			file.remove();  		
 // 需要重新加载一次,去掉好像会有滴问题,暂没查清原因。哪位大神指点下
			$("#uploadFile").change(function(){
				uploadFile();
			});
}

DataGrid 的部分用法

1、刷新指定一行数据,如: $('#dataGridId').datagrid('refreshRow', index);

2、鼠标指定某一列(单元格)触发事件 如:onClickCell:function(rowIndex, field, value){}

3、合并单元格 如:

onLoadSuccess:function (data){
	var mark_field=1;		
 for (var i=1; i <data.rows.length; i++) {//这里循环表格当前的数据
		if (data.rows[i]['field'] == data.rows[i-1]['field']) {//后一行的值与前一行的值做比较,相同就需要合并
		  mark_field+= 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
	$(this).datagrid('mergeCells',{
	index: i+1-mark_field,  //datagrid的index,表示从第几行开始合并
	field: 'companyName', //合并单元格的区域,就是clomun中的filed对应的列
	rowspan:mark_field //纵向合并的格数,如果想要横向合并,就使用colspan:mark
		})
	}else{
	mark_field=1;  //一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
	}
}

4、弹窗提示 效果如:

$("#dataGridId").datagrid('doCellTip',{'max-width':'1000px','delay':300});

5、dataGrid动态新增行,并且编辑该行

// 新增行 
$("#add_button").click(function(){
    	if (editRow != undefined) {
            $("#dataGridId").datagrid('endEdit', editRow);
        }
        if (editRow == undefined) {
            $("#dataGridId").datagrid('insertRow', {
               // index: 0,
                row: {}
            });
        }
      // 添加其他处理逻辑 如:按钮的显示,隐藏等
       $("#button1").show();
	   $("#button2").hide();
});

// 编辑该行
 $("#edit_button").click(function(){
		var row = $("#dataGridId").datagrid('getSelected');
		if(!row){
			$.messager.alert("操作提示","请选择","warning");
		}else {
			var index = $('#dataGridId').datagrid('getRowIndex',row);//获取行号
			editRow = index;
			updateRow = index;
			 $('#dataGridId').datagrid('selectRow', editRow).datagrid('beginEdit', editRow); 
		}
 // 添加其他处理逻辑 如:按钮的显示,隐藏等
	  $("#button1").show();
	   $("#button2").hide();
	});

6、dataGrid动态的加载列

// 动态加载Url
$('#dataGridId').datagrid('options').url=url;
// 加载数据
$("#dataGridId").datagrid("load",pams);
// 动态加载固定列,以及动态列
$("#dataGridId").datagrid({frozenColumns:frozensColumns,columns:deatilColumns});

如有描述有误的地方,请各位大神指点.. 抱拳

猜你喜欢

转载自blog.csdn.net/u010200793/article/details/106586723