码迷,mamicode.com
首页 > 其他好文 > 详细

界面UI系统雏形

时间:2015-03-29 01:56:48      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

最近一直在做界面的灵活性,界面UI的设计可以说是一个永不褪色的话题,怎么说呢?首先给用户第一直观感受的肯定是你这款软件的界面设计好坏与否?所以界面UI应该予以重视。


界面UI系统的流程图:

技术分享


第一步:页面模板,即动态生成页面

为什么需要动态生成页面呢?我们都知道一个JSP页面包括很多的信息,包括HTML表头、系统div块、显示数据的表格、添加/编辑的弹框。而这些都是每一个页面中都需要重复的。如何避免这些重复的代码,减少开发人员的工作量呢?这就引出了动态生成页面,即动态的创建业务页面,不需要手写HTML表头,不需要手写数据表格控件等等。。。当然,上面生成的页面只是一个半成品,但是我们可以通过编辑页面或是自己在生成好的jsp页面中补充不能满足的那部分HTML。


动态生成页面,有两部分组成,一是页面模板,主要是利用freemarker工具生成。二是自定义拼接控件类,该类主要被各个业务子系统调用,应对于业务系统的需求变更。


第二部:选择实体

界面UI系统如何控制各个被管理的业务系统?通过上传实体,让UI系统来管理各个业务系统的实体。业务各系统将自己的实体打成jar包,上传到UI系统。UI系统通过解析jar包,获取实体类名、描述、属性名、属性描述、属性类型

、长度等传到数据库。


第三步:生成页面

根据上传的实体类,选择实体生成表单。首先会默认生成一套不完善的表单,如果需要进一步完善,则在编辑表单中进行完善。


第四步:编辑表单

控制界面是否为列显示或者表单显示,以及显示的控件类型。 这里涉及到根据表单查询出所对应的属性,进行动态拼接控件,并且动态填充数据到控件中。  如下图:


技术分享


JS实现拼控件流程: 

1. 查询表单属性,返回JSON串

<!--打开编辑弹出框- 朱火云-  start-->
		var detailSourceList = "";
		function updateForm(index) {
			
			$('#dg').datagrid('selectRow', index);
			var row= $('#dg').datagrid('getSelected');
			
				if (!row || row.length == 0) {
					 $.messager.alert("提示", "请选择编辑项目");
					return;
				}
				if (row.length > 1) {
					$.messager.alert("提示","请选择一条记录再编辑");
					return;
				}	
				
			var id = row.id; 
			var tableName = row.tableName;            //获取表名
			var content = row.content;               // 获取表描述		
			isexitControl();    //打开编辑框之前先判断是否有缓存控件,有则进行删除
			 $.ajax({			
				  url:"findAllField",    //根据表单id查询表单所对应的属性
				  type: "GET",
				  async:false,
				  dataType: "json",
				  data: { headId:id},   
				  //根据HeadId查询表单属性
				  success: function(data){
					 //调用创建表和动态填充数据方法						
				    createDetailTable(data);  
				    }				  
			 });		   	
			 
			$('#formobj').form('load',{
				headId : id,				
				tableName : tableName,
				content : content, 													
				});		
			$('#updateDiv').dialog('open').dialog('setTitle', '编辑表单');	

		}


2.根据返回的JSON串拼接对应的控件

	
		function createDetailTable(detailSourceList){			
			//返回的json,表格中需要显示的记录;有记录的话就拼table,绑定数据					
			if(detailSourceList.length>0){		
				for(var i =0; i < detailSourceList.length-1; i++){
					//1. 动态拼接table
					 var row = tab_div_database.insertRow(tab_div_database.rows.length);			
					 var col = row.insertCell(0);
					col.innerHTML = "<input name='chck' type='checkbox' style='width:30px' /><input  name='courseIdAdd'  type='hidden'/><input id='fieldLength' tabindex='" + rowIndex +"'  type='hidden'/>";
					col = row.insertCell(1);
					col.innerHTML = "<input name='fieldName' style='width:130px' ><input  name='teacherIdAdd'  type='hidden'>";
					col = row.insertCell(2);
					col.innerHTML = "<input name='fieldDesc' style='width:130px' ><input  name='termIdAdd'  type='hidden'>";
					col = row.insertCell(3);
					col.innerHTML = "<input name='fieldLength' style='width:50px' >";
					col = row.insertCell(4);
					col.innerHTML = "<input  name='pointLength' style='width:50px' >";
					col = row.insertCell(5);
					col.innerHTML = "<input  name='fieldDefault' style='width:50px' >";
					col = row.insertCell(6);
					//拼接下拉列表,easyUI样式不起作用
                    var strSelect = "<select style='width: 100px' name='type'>";
					
                    //下拉列表根据返回的type类型,默认显示
                    if('String' == detailSourceList[i].type){
						col.innerHTML=strSelect + "<option value='String' selected='true'>String</option> <option value='Integer'>Integer</option><option value='Float'>Float</option></select>";
					}
					else if('Integer' == detailSourceList[i].type){
						col.innerHTML=strSelect + "<option value='Integer' selected='true'>Integer</option><option value='String'>String</option><option value='Float'>Float</option></select>";
					}
					else if('Float' == detailSourceList[i].type){
						col.innerHTML=strSelect + "<option value='Float' selected='true'>Float</option><option value='Integer'>Integer</option><option value='String'>String</option></select>";
					}
					else{
						col.innerHTML=strSelect + "<option value='xuanzhe' selected='true'>请选择</option><option value='String'>String</option><option value='Integer'>Integer</option><option value='Float'>Float</option></select>";
					}		
					
					col = row.insertCell(7);	
					col.innerHTML = "<input name='isKey' type='checkbox' style='width:30px' />";
					col = row.insertCell(8);	
					col.innerHTML = "<input name='isNull' type='checkbox' style='width:30px' /><input  id ='fieldId' name='fieldId'  type='hidden'/>";
					row.setAttribute("id","row" + rowIndex);
					rowIndex++; 
				}

3.给控件动态填充数据

	//2.动态填充数据到具体控件
	//遍历Table的所有row
	for(var j = 1; j < tab_div_database.rows.length; j++ ){	
		fieldIdList[j-1].value = detailSourceList[j-1].id;
		fieldNameList[j-1].value = detailSourceList[j-1].fieldName;
		fieldDescList[j-1].value = detailSourceList[j-1].fieldDesc;
		fieldLengthList[j-1].value = detailSourceList[j-1].fieldLength;
		fieldDefaultList[j-1].value = detailSourceList[j-1].pointLength;
		isKeyList[j-1].value = detailSourceList[j-1].isKey;
		isNullList[j-1].value = detailSourceList[j-1].isNull;
	       }
		}else{
				
	     }	
	}
			


这次的界面UI系统只完成了一个Demo,还有很多需要待完善的东西,比如说动态布局、CSS和JS的封装等等。。。。。


界面UI系统雏形

标签:

原文地址:http://blog.csdn.net/mingxuanyun/article/details/44685871

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!