EasyUI tree加载树

Posted 朝花有露

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyUI tree加载树相关的知识,希望对你有一定的参考价值。

           树控件,很常用,可以做有层级的菜单,比如公司划分,省市区的选择等……

          最大的好处就是有层级关系,看起来和选择起来比较清晰,就像一串杂乱无章的json你用bejson去格式化一样的感觉,可以适当提升用户体验。

 

树的两种加载方式

             tree的加载方式分为常规加载和异步加载两种,常规加载也就是一次性把整棵树都加载出来,异步加载就是展开父节点的时候才会去加载子节点。

              在数据量比较小的时候比价常用,还有一种情况必须使用同步加载,需要全选或者级联选择的时候。

               若使用异步加载,那么当你若未展开父节点而勾选父节点的话,实际上只有父节点被选中,而父节点下的子节点还未加载,造成“选择丢失”这种情况必须使用同步加载。

                小编的公司项目中,需要加载组织机构树。组织机构为4个节点。从后台传到前台为 json ,当组织结构信息不是从一张表中查到的信息,此时需要添加一个treeEntiy 实体,来进行加载。

/**
 * 树形结构信息存储(不是存储在数据库中,用的是一个工具类,纯碎的polo对象)
 * @author xulu
 *
 */
public class Tree  

	   private String id;
	   
	   private String pId;//父节点Id
	   
	   private String name;//名称
	   
	   private String url;//url
	   
	   private Boolean open;//节点是否打开
	   
	   private Boolean checked;//多选框是否选中
	   
		public String getId() 
			return id;
		
		public void setId(String id) 
			this.id = id;
		
		public String getpId() 
			return pId;
		
		public void setpId(String pId) 
			this.pId = pId;
		
		public String getName() 
			return name;
		
		public void setName(String name) 
			this.name = name;
		
		public String getUrl() 
			return url;
		
		public void setUrl(String url) 
			this.url = url;
		
		public Boolean getOpen() 
			return open;
		
		public void setOpen(Boolean open) 
			this.open = open;
		
		public Boolean getChecked() 
			return checked;
		
		public void setChecked(Boolean checked) 
			this.checked = checked;
		

                   在control中进行相应的转换。以Id 和Pid 形式。

/**
	 * 根据教秘code查询学院、专业、班级转化成树形-徐露
	 *
	 * @param institutionList
	 *            学院、专业、年级、班级集合
	 * @return
	 * @throws Exception
	 */
	public List<Tree> convertInstitutionNameByTeacherCodeTreeList(List<Map<Serializable, Serializable>> institutionList) throws Exception 
		List<Tree> InstitutionTree = new ArrayList<Tree>();
		List<Tree> InstitutionTreelist = new ArrayList<Tree>();
		if (!institutionList.equals("")) 
			// ================大学院节点=================
			Tree tree = new Tree();
			tree.setId(institutionList.get(0).get("BIGInstitutionID").toString());// 学院id
			tree.setName(institutionList.get(0).get("BigInstitutionName").toString());
			tree.setpId("");
			tree.setOpen(false);
			InstitutionTree.add(tree);
			boolean isExist;

			// ==============专业节点================
			for (Map<Serializable, Serializable> institution : institutionList) 
				isExist = false;
				for (Tree institutionTree : InstitutionTree) 
					// 专业id
					if (institutionTree.getId().equals(institution.get("InstitutionID"))) 
						isExist = true;
					
				// 去重复数据的过程
				if (isExist == false) 
					Tree tree1 = new Tree();
					tree1.setId(institution.get("InstitutionID").toString());
					tree1.setName(institution.get("InstitutionName").toString());
					tree1.setpId(institution.get("BIGInstitutionID").toString());
					tree1.setOpen(false);
					InstitutionTree.add(tree1);
				
			
			// ================年级节点===============
			// 1.先比较优先级,排序
			// 2.将排好序的list,去重
			listSortGrade(institutionList);// 调用排序方法,达到年级按大小顺序排序
			for (Map<Serializable, Serializable> institution1 : institutionList) 
				isExist = false;
				for (Tree institutionTree1 : InstitutionTree) 
					String getGradeID = institutionTree1.getId();
					// 年级id
					String gradeID = institution1.get("InstitutionID").toString() + institution1.get("gradeID").toString();
					if (getGradeID.equals(gradeID)) 
						isExist = true;
					
				// 去重复数据的过程
				if (isExist == false) 
					Tree tree2 = new Tree();
					tree2.setId(institution1.get("InstitutionID").toString() + institution1.get("gradeID").toString());
					tree2.setName(institution1.get("gradeName").toString());
					tree2.setpId(institution1.get("InstitutionID").toString());
					tree2.setOpen(false);
					InstitutionTree.add(tree2);
				
			
			// ==================班级节点==================
			listSortClass(institutionList);// 调用排序方法,达到班级按大小顺序排序
			for (Map<Serializable, Serializable> institution2 : institutionList) 
				isExist = false;
				for (Tree institutionTree2 : InstitutionTree) 
					// 班级id
					String getClassID = institutionTree2.getId();
					String classID = institution2.get("classID").toString();
					if (getClassID.equals(classID)) 
						isExist = true;
					
				// 去重复数据的过程
				if (isExist == false) 
					Tree tree3 = new Tree();
					tree3.setId(institution2.get("classID").toString());
					tree3.setName(institution2.get("className").toString());
					tree3.setpId(institution2.get("InstitutionID").toString() + institution2.get("gradeID").toString());
					tree3.setOpen(true);
					InstitutionTree.add(tree3);
				
			
			InstitutionTreelist.addAll(InstitutionTree);
			return InstitutionTreelist;
		 else 
			return null;
		

	

                  以上是后台代码,在jp 添加组织树节点。

//zTree参数设置
var zTree;
var demoIframe;
var zNodes;
//var userIdsGloble;
var setting = 
	treeId : "insititutionTree",
	view : 
		dblClickExpand : false,
		showLine : true,
		selectedMulti : false
	,
	edit : 
		drag : 
			autoExpandTrigger : true,
		,
		enable : true,
		showRemoveBtn : false,
		showRenameBtn : false
	,
	data : 
		simpleData : 
			enable : true,
			idKey : "id",
			pIdKey : "pId",
			rootPId : "0"
		
	,
	callback : 
		onClick : zTreeOnClick
	
;
// 页面加载
$(document).ready(function() 
<span style="white-space:pre">	</span>// 加载资源树
<span style="white-space:pre">	</span>var t = $("#tree");
<span style="white-space:pre">	</span>$.ajax(
<span style="white-space:pre">		</span>type : 'post',
<span style="white-space:pre">		</span>url : "queryInstitutionNameByTeacherCode",
<span style="white-space:pre">		</span>dataType : "text",
<span style="white-space:pre">		</span>async : false,
<span style="white-space:pre">		</span>success : function(data) 
<span style="white-space:pre">			</span>zNodes = eval(data);
<span style="white-space:pre">			</span>t = $.fn.zTree.init(t, setting, zNodes);
<span style="white-space:pre">			</span>var zTree = $.fn.zTree.getZTreeObj("tree");
<span style="white-space:pre">			</span>// 首次访问主页时默认自动单击根节点
<span style="white-space:pre">			</span>var treeNode = zTree.getNodeByParam("pId", "0");
<span style="white-space:pre">			</span>$("#" + treeNode.tId + "_a").click();


<span style="white-space:pre">			</span>var node = zTree.getNodeByTId(treeNode.tId);
<span style="white-space:pre">			</span>zTree.selectNode(node, false);
<span style="white-space:pre">			</span>zTree.expandNode(node, true, false, false);
<span style="white-space:pre">		</span>
<span style="white-space:pre">			</span>setFlagTab();
<span style="white-space:pre">		</span>,
<span style="white-space:pre">		</span>error : function(msg) 
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>);
);




以上是关于EasyUI tree加载树的主要内容,如果未能解决你的问题,请参考以下文章

MVC4中EasyUI Tree异步加载JSON数据生成树

EasyUI 树菜单

用easyui tree从后台传data,遇到树结构层级比较多的怎么办?

easyui tree 全部展开在折叠。部分子节点没有折叠

easyui中tree树默认展开第一个根节点?

EasyUI 树形菜单加载父/子节点