【zTree】简单实例与异步加载实例
来源:互联网 发布:the game awards知乎 编辑:程序博客网 时间:2024/06/05 18:21
我们在项目中经常会需要用到树,这次按照数据库存储的特点重新了做一个小demo,使用zTree来实现这个功能。
简单实例:
首先我们需要在界面中引入代码,很简单,但是很重要,它用来存放加载的树。
ps:添加ztree的引用,下载地址:http://www.ztree.me/v3/main.php#_zTreeInfo
<span style="font-family:KaiTi_GB2312;font-size:18px;"><ul id="tree" class="ztree"></ul> </span>
其次是js代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> var tree = { /** * 所有的初始化的操作 */ pFunction: { zTree: '', setting: { view: { dblClickExpand: false, showLine: true, //是否显示节点间的连线 selectedMulti: false, expandSpeed: "fast" }, callback: { onDblClick: zTreeOnDblClick }, check: { enable: true, chkStyle: "radio", radioType: "all" }, data: { key: { name: "Name" //界面显示的名称参数 }, simpleData: { enable: true, idKey: "ID", pIdKey: "PID", rootPId: "null" } } }, //加载树的资源 loadTree: function () { $.post("/HomeIndex/Ztree", null, function (resourceInfo) { //核心代码,将查询到的信息存放到setting格式的tree中 $.fn.zTree.init($("#tree"), tree.pFunction.setting, resourceInfo); }); }, } };</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> public JsonResult Ztree() { List<Tree> tree = new List<Tree>(); Tree tree1 = new Tree(); Tree tree2 = new Tree(); Tree tree3 = new Tree(); Tree tree4 = new Tree(); Tree tree5 = new Tree(); Tree tree6 = new Tree(); Tree tree7 = new Tree(); tree1.ID = "01"; tree1.Name = "一"; tree1.ID1 = "0101"; tree1.Name1 = "一一"; tree1.ID2 = "010104"; tree1.Name2 = "一一一"; tree1.ID3 = "01010406"; tree1.Name3 = "一一一一"; tree2.ID = "01"; tree2.Name = "一"; tree2.ID1 = "0102"; tree2.Name1 = "一二"; tree2.ID2 = "010204"; tree2.Name2 = "一二一"; tree2.ID3 = "01010407"; tree2.Name3 = "一二一一"; tree3.ID = "01"; tree3.Name = "一"; tree3.ID1 = "0102"; tree3.Name1 = "一二"; tree3.ID2 = "010205"; tree3.Name2 = "一二二"; tree3.ID3 = "01020501"; tree3.Name3 = "一二二一"; tree4.ID = "02"; tree4.Name = "二"; tree4.ID1 = "0201"; tree4.Name1 = "二一"; tree4.ID2 = "020101"; tree4.Name2 = "二一一"; tree4.ID3 = "02010103"; tree4.Name3 = "二一一一"; tree5.ID = "02"; tree5.Name = "二"; tree5.ID1 = "0201"; tree5.Name1 = "二一"; tree5.ID2 = "020101"; tree5.Name2 = "二一一"; tree5.ID3 = "02010104"; tree5.Name3 = "二一一二"; tree6.ID = "02"; tree6.Name = "二"; tree6.ID1 = "0201"; tree6.Name1 = "二一"; tree6.ID2 = "020102"; tree6.Name2 = "二一二"; tree6.ID3 = "02010203"; tree6.Name3 = "二一二一"; tree7.ID = "02"; tree7.Name = "二"; tree7.ID1 = "0202"; tree7.Name1 = "二二"; tree7.ID2 = "020201"; tree7.Name2 = "二二一"; tree7.ID3 = "02020103"; tree7.Name3 = "二二一一"; //将测试数据存放到tree的list集合中 tree.Add(tree1); tree.Add(tree2); tree.Add(tree3); tree.Add(tree4); tree.Add(tree5); tree.Add(tree6); tree.Add(tree7); List<Tree> treelist = new List<Tree>(); //根据需要查询每个单位字段的个数,并附id和pid //一级菜单 var AllCount1 = from p in tree group p by new { p.ID, p.Name } into g select g; foreach (var item in AllCount1) { Tree treea = new Tree(); treea.PID = null; treea.ID=item.Key.ID; treea.Name = item.Key.Name; treelist.Add(treea); } //二级菜单 var AllCount2 = from p in tree group p by new { p.ID1, p.Name1 } into g select g; foreach (var item in AllCount2) { Tree treeb = new Tree(); treeb.PID = item.Key.ID1.Substring(0,2); treeb.ID = item.Key.ID1; treeb.Name = item.Key.Name1; treelist.Add(treeb); } //三级菜单 var AllCount3 = from p in tree group p by new { p.ID2, p.Name2 } into g select g; foreach (var item in AllCount3) { Tree treec = new Tree(); treec.PID = item.Key.ID2.Substring(0, 4); treec.ID = item.Key.ID2; treec.Name = item.Key.Name2; treelist.Add(treec); } //四级菜单 var AllCount4 = from p in tree group p by new { p.ID3, p.Name3 } into g select g; foreach (var item in AllCount4) { Tree treed = new Tree(); treed.PID = item.Key.ID3.Substring(0, 6); treed.ID = item.Key.ID3; treed.Name = item.Key.Name3; treelist.Add(treed); } return Json(treelist, JsonRequestBehavior.AllowGet); } public class Tree { public string PID { get; set; } public string ID { get; set; } public string Name { get; set; } public string ID1 { get; set; } public string Name1 { get; set; } public string ID2 { get; set; } public string Name2 { get; set; } public string ID3 { get; set; } public string Name3 { get; set; } }</span>
效果图:
改进版:异步加载
用这种写法在数据量小的情况下一次性把所有节点的信息查询出来是没有问题的,但这次项目中实践中发现查询出的数据量有三万多,这样一次性快速显示是不容易的,还会造成浏览器卡死的情况。所以不得不采用zTree的异步加载来实现,初次加载显示父节点,每次点击节点后再查询加载子节点。不得不说通过查阅API文档发现zTree真的很强大。如果想了解详细内容可以看文档。
需要在代码中添加异步加载的方法:
var setting = { data: { key: { name:"name" }, simpleData: { enable: true, idKey: "ID", pIdKey: "PID", isParent: "isParent", rootPId:null } }, view: { dblClickExpand: false, showLine: true, selectedMulti: false, expandSpeed:"fast" }, async: { enable: true, url: "", autoParam: ["ID", "PID", "index"], type:"post" }, check:{ enable: true, chkStyle: "radio", radioType:"all" }, callback: { onClick:reLoadOpenURL //节点被点击时调用的方法 }}function reLoadOpenURL(event, treeId, treeNode) { if (treeNode.isParent) { } else { if (confirm("确定选择此商品吗?")) { window.opener.document.getElementById("pCode").value = treeNode.ID; window.close(); } else { } }};$(document).ready(function () { $.fn.zTree.init(("#tree"), setting);});
后台的方法根据传递的参数再查询我们需要的每个节点信息,而不是一次性的全部查询出来。
小结:
zTree的核心就是父节点和子节点以及一些特定的格式,比如setting、界面ul存放,最后将查询到的信息存放到setting格式tree中的代码。
实现一个功能首先要了解需求,然后考虑实现思路,公司开发讲究的是效率,首先选择自己最擅长的方式来实现。
最近做项目的感受就是,没有什么难与不难,会用了就不难了,凭借很多工具和途径我们总会找到解决办法。在工作中遇到什么困难不要畏惧,最后都会解决的,先去想实现再说。
每天进步一点点~
1 0
- 【zTree】简单实例与异步加载实例
- jquery zTree异步加载简单实例
- jquery zTree异步加载简单实例分享
- jquery zTree异步加载简单实例分享
- jquery zTree异步加载实例
- jquery zTree异步加载实例
- IT忍者神龟之jquery zTree异步加载简单实例
- zTree简单配置实例
- zTree的简单实例
- zTree简单配置实例
- Ztree的简单实例
- zTree异步加载简单demo
- zTree 简单地实现异步加载
- ztree异步加载简单示例(struts2)
- zTree简单使用(异步加载)
- zTree实例
- zTree实例
- ztree实例
- CentOS7 安装Mysql5.7(解压缩版)
- 【Python学习笔记】函数式编程:高阶函数sorted
- 第十一篇 ANDROID 系统网络连接和管理机制与架构
- 大数据:Spark性能优化指南 高级篇
- HDU 4277 USACO ORZ DFS
- 【zTree】简单实例与异步加载实例
- 学习Java的第一天
- spark shell 启动出错问题
- 自定义Push和Pop过渡动画
- java泛型通配符示例
- 泛型的嵌套设置
- C++ virtual关键字深入理解
- Win10Matlab7Runtime Error
- hdu 4751 Divide Groups bfs 搜索 解题报告