【easyui】treeGrid实现分页以及异步加载子节点 末蓝、 2022-06-13 06:21 781阅读 0赞 ## 前提纪要 ## 项目中有这样一个需求,在合同列表中,每一个合同下面会有很多子合同,需要按照树形结构进行显示。同时,对于父合同需要进行分页显示。 ## 框架使用 ## easyUI + springMvc ## 主要工作 ## 1. 实现合同的分页显示 2. 实现点击父合同,能够展开,异步加载子节点,并且不重复加载 ## 代码实现 ## ### SpringMvc端代码 ### **返回父合同的dataGrid列表-controller层** @ResponseBody @RequestMapping("/queryOtherContract") public DataGrid queryOtherContract() { try { return otherContractService.queryOtherContract(); } catch (Exception e) { log.error(e); } return null; } **返回父合同的dataGrid列表-intf层** DataGrid queryOtherContract(); **返回父合同的dataGrid列表-impl层** @Override public DataGrid queryOtherContract(String keyWords, Long projectId, Long pid) { List<OtherContractBean> result = new ArrayList<OtherContractBean>(); //自己建一个实体,里面内容随便建,只要有id,和name和state就可以 //state = closed,列表图标是文件夹,可以打开 //state = open,列表图标是文件,不可以打开 return new DataGrid(result, 30L); } ### 页面显示父合同的treeGrid代码 ### **html代码** <div data-options="region:'center',border:false" style="border:0px;overflow: hidden;margin-left:5px;margin-right:5px;"> <table id="treeGrid"></table> </div> **js代码** function initDataGrid() { treeGrid = $("#treeGrid").treegrid({ nowrap: true, fit: true, border: false, method: 'GET', rownumbers: true,//显示行号 collapsible: false,//定义面板是否可以折叠 loadMsg: "正在加载信息请稍候...", animate: false, idField: 'id', //数据表格要有主键 treeField: 'name', //treegrid 树形结构主键 text fitColumns: false,//表格自动适应 striped: false,//隔行变色, pagination: true,//底部显示工具栏组件 pageSize: 20, pageList: [1, 20, 30, 40, 50],//每页显示数 frozenColumns: [[{ field: 'id', title: 'id', hidden: true }, { field: 'name', title: '合同名称', width: 200, align: 'center', sortable: true, formatter: linkValueFormatter }]], onLoadSuccess: function (data) { delete $(this).treegrid('options').queryParams['id']; }, onContextMenu: function (e, row) { e.preventDefault(); //屏蔽浏览器的菜单 $(this).treegrid('unselectAll'); //清除所有选中项 if ($("#menu > div").size() > 1) { $('#menu').menu('show', { left: e.pageX - 10, top: e.pageY - 5 }); } }, onBeforeExpand: function (row, param) { var tg = $(this);//当前页面 var opts = tg.treegrid('options');//获取属性表格的属性对象 if (row.state == "closed" && row.children == undefined) { $.post("${pageContext.request.contextPath}/cost/otherContract/queryOtherChildrenContract.do?pid=" + row.id, function (json) { if (json) { tg.treegrid('append', { parent: row[opts.idField],//父节点id data: json }); } else { layer.alert("error", {icon: 5, time: 1000}); } }, "JSON"); } }, onClickCell: function (rowIndex, field, value) { //单元格点击事件 //treeGrid 单元格点击特有写法,不要与dataGrid混淆 if (rowIndex == 'name') { //点击事件 } } }); } ### 效果 ### ![这里写图片描述][SouthEast] ### 异步加载子节点的后台代码 ### **返回子合同的dataGrid列表-controller层** @ResponseBody @RequestMapping("/queryOtherChildrenContract") public List<OtherContractBean> queryOtherChildrenContract(Long pid) { try { return otherContractService.queryOtherChildrenContract(pid); } catch (Exception e) { log.error("查询其他合同变更信息异常", e); } return null; } **返回子合同的dataGrid列表-intf层** List<OtherContractBean> queryOtherChildrenContract(Long pid); **返回子合同的dataGrid列表-impl层** @Override public List<OtherContractBean> queryOtherChildrenContract(String keyWords, Long projectId, Long pid) { List<OtherContractBean> result = new ArrayList<OtherContractBean>(); //自己建一个实体,里面内容随便建,只要有id,和name就可以 return result; } ### 加载子节点效果 ### ![这里写图片描述][SouthEast 1] ## 关键点讲解 ## 1. 查询父合同时,我返回的是一个dataGrid对象,该对象中保存了总total和当前页面需要显示的rows两个对象,根据total进行分页 2. 父合同实体对象中,需要加入一个属性,state。state = closed时,该列的名称前面, treeGrid会自动加一个文件夹的图标,表明该列是可以展开的 3. 在treegrid初始化的函数中,调用了onBeforeExpand函数,也就是在展开之前,我需要对该行数据进行判断,是否有数据需要异步加载。 4. onBeforeExpand函数讲解 onBeforeExpand: function (row, param) { var tg = $(this);//当前页面 var opts = tg.treegrid('options');//获取属性表格的属性对象 //判断该行是否能够打开,根据state属性 //根据children属性判断,该行是否已经加载了子节点,如果已经加载了,则直接展开 if (row.state == "closed" && row.children == undefined) { //通过post方法,去后台取子合同的数据 $.post("${pageContext.request.contextPath}/cost/otherContract/queryOtherChildrenContract.do?pid=" + row.id, function (json) { if (json) { //如果有子合同数据,则使用append的方式,追加到当前父节点的下方 tg.treegrid('append', { parent: row[opts.idField],//父节点id data: json }); } else { layer.alert("error", {icon: 5, time: 1000}); } }, "JSON"); } }, ## 后记 ## 我不知道是否还有其他方式能实现这一功能,如果有更好的方法,欢迎大家一起来讨论。 [SouthEast]: /images/20220613/f49e4533c4234807ba6a1cd297434aab.png [SouthEast 1]: /images/20220613/96c9bd98995346359c92a26e77b63a1c.png
相关 Vue.js 中使用 Element UI 实现异步加载分页列表 Vue.js 中使用 Element UI 实现异步加载分页列表 在前端开发中,我们常常需要展示大量数据,并提供分页浏览的功能。本篇博客将介绍如何使用 Vue.js 和 爱被打了一巴掌/ 2024年02月05日 17:46/ 0 赞/ 35 阅读
相关 【微信小程序】实现分页加载 一、效果 ![format_png][] 已加载全部.png 二、步骤 1. wxml中 <view class="loading" hidde 墨蓝/ 2023年03月06日 05:45/ 0 赞/ 119 阅读
相关 JQ自动加载函数: 分页加懒加载 JS: var _page = 1, _words = '', _loadDone = false; //当滚动条即将到达底部自动加载数据 Dear 丶/ 2023年02月20日 07:08/ 0 赞/ 16 阅读
相关 listView实现分页加载 实现简单的listview分页加载,效果如下图所示: ![这里写图片描述][20160306020113348] ListView显示预加载的10个Item,往上拉动每 本是古典 何须时尚/ 2022年08月21日 00:04/ 0 赞/ 234 阅读
相关 ListView分页加载 技术要点:源码地址:http://download.csdn.net/detail/anlidengshiwei/8576857[点击打开链接][Link 1] 1、 对于 深碍√TFBOYSˉ_/ 2022年08月07日 12:38/ 0 赞/ 233 阅读
相关 【easyui】treeGrid实现分页以及异步加载子节点 前提纪要 项目中有这样一个需求,在合同列表中,每一个合同下面会有很多子合同,需要按照树形结构进行显示。同时,对于父合同需要进行分页显示。 框架使用 easyUI 末蓝、/ 2022年06月13日 06:21/ 0 赞/ 782 阅读
相关 zTree异步加载展开第一级节点 在 setting 中的 callback 中加上 onAsyncSuccess:onAsyncSuccess 回调函数 , 然后实现回调函数 var 墨蓝/ 2022年06月01日 06:13/ 0 赞/ 230 阅读
相关 MVC母版页异步加载子页面 1.用ajax的方式实现异步加载子页面: function MasterPageJump(Url) { $.ajax({ 深藏阁楼爱情的钟/ 2022年05月27日 05:24/ 0 赞/ 182 阅读
相关 bootstrap-combotree异步加载子节点数据 bootstrap-combotree异步加载子节点数据 小木子第一次写博客,代码基础也不是那么完美,只是分享一下自己的一些自己的想法,如果有什么不对的,希望您留言, 深藏阁楼爱情的钟/ 2022年01月29日 01:17/ 0 赞/ 326 阅读
还没有评论,来说两句吧...