combotree -下拉框树异步加载
问题:
下拉树数据比较多时,全加载会产生页面延迟,需要实现异步加载
方案:
点击事件加载:先加载部分,点击节点时再展开并追加子节点
onBeforeExpand事件:在展开树前加载,感觉这种方式比较优雅,原理上和点击加载应该是相通的,细节区别没详细研究 实现:
//机构列表
function initHbxdOrg_add(id){
$('#orgId_add').combotree({
url: './user/getOrgTree?areaIdAdd='+id,
required: false,
queryParams:{Authorization: localStorage.token},
method:'get',
otherParam: {"areaIdAdd":id},
parentField:"pid",
textFiled:"name",
idFiled:"id",
animate : true,
onClick: function(node){
//部门
initHbxdDept_add(node.id);
},
onBeforeExpand:function(node,param){
$('#orgId_add').combotree("tree").tree('options').url = './user/getOrgTree?areaIdAdd='+id+'&pid='+node.id+'&lvl='+node.lvl;
},
onLoadSuccess: function (row, data) {
//$('#orgId_add').combotree('tree').tree("collapseAll");
},
loadFilter : definedTreeFilter
}); }
默认过滤器实现:没看出它有什么作用
/**
* 封装数据,将list结果集封装为树形结果集
* @param data
* @param parent
* @returns {*}
*/
function definedTreeFilter(data, parent){
var opt = $(this).data().tree.options;
var idFiled,
textFiled,
parentField;
if (opt.parentField) {
idFiled = opt.idFiled || 'id';
textFiled = opt.textFiled || 'text';
parentField = opt.parentField; var i,
l,
treeData = [],
tmpMap = []; for (i = 0, l = data.length; i < l; i++) {
tmpMap[data[i][idFiled]] = data[i];
} for (i = 0, l = data.length; i < l; i++) {
if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) {
if (!tmpMap[data[i][parentField]]['children'])
tmpMap[data[i][parentField]]['children'] = [];
data[i]['text'] = data[i][textFiled];
tmpMap[data[i][parentField]]['children'].push(data[i]);
if(tmpMap[data[i][parentField]]['children']){
tmpMap[data[i][parentField]].checked = false;
}
} else {
data[i]['text'] = data[i][textFiled];
treeData.push(data[i]);
}
}
return treeData;
}
return data;
}
查询sql: 同样添加状态属性
<select id="getRealOrgTree" resultType="org.triber.common.model.user.TreeNode">
<if test="pid == null or pid == ''">
SELECT DISTINCT ORG_TYPE_ID_1 AS id, ORG_TYPE_DSCR_1 AS `NAME`, 0 AS pid, 1 AS lvl, 'closed' AS state FROM dmcode.t_org_biz_lvl WHERE ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
</if>
<if test="pid != null and pid != ''">
<if test="lvl == 1 or lvl == ''">
SELECT DISTINCT ORG_TYPE_ID_2 AS id, ORG_TYPE_DSCR_2 AS `NAME`, ORG_TYPE_ID_1 AS pid, 2 AS lvl, 'closed' AS state FROM dmcode.t_org_biz_lvl
WHERE 1=1
AND ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
<if test="userType == 2 or userType == ''">
AND ORG_TYPE_ID_2 != 'A00'
</if>
<if test="userType == 1 or userType == ''">
AND ORG_TYPE_ID_2 = 'A00'
</if>
AND AREA_NO_ID IN (
SELECT
AREA_NO_ID
FROM
dmcode.t_area_code
WHERE (area_no_id_1 = #{AREA_NO_ID} OR area_no_id_2 = #{AREA_NO_ID} OR area_no_id = #{AREA_NO_ID})
)
ORDER BY ORG_TYPE_ID_2
</if>
<if test="lvl == 2 or lvl == ''">
SELECT DISTINCT
ORG_ID_1 AS id, ORG_DSCR_1 AS `NAME`, ORG_TYPE_ID_2 AS pid, 3 AS lvl, 'closed' AS state
FROM dmcode.t_org_biz_lvl
WHERE 1=1
AND ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
<if test="userType == 2 or userType == ''">
AND ORG_TYPE_ID_2 != 'A00'
</if>
<if test="userType == 1 or userType == ''">
AND ORG_TYPE_ID_2 = 'A00'
</if>
AND ORG_ID_1 != #{pid}
AND ORG_TYPE_ID_2=#{pid}
AND AREA_NO_ID IN (
SELECT
AREA_NO_ID
FROM
dmcode.t_area_code
WHERE
(area_no_id_1 = #{AREA_NO_ID} OR area_no_id_2 = #{AREA_NO_ID} OR area_no_id = #{AREA_NO_ID})
)
ORDER BY ORG_ID_1
</if>
<if test="lvl == 3 or lvl == ''">
SELECT DISTINCT
ORG_ID_2 AS id, ORG_DSCR_2 AS `NAME`, ORG_ID_1 AS pid, 4 AS lvl, 'closed' AS state
FROM dmcode.t_org_biz_lvl
WHERE 1=1
AND ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
<if test="userType == 2 or userType == ''">
AND ORG_TYPE_ID_2 != 'A00'
</if>
<if test="userType == 1 or userType == ''">
AND ORG_TYPE_ID_2 = 'A00'
</if>
AND ORG_ID_2 != #{pid}
AND ORG_ID_1=#{pid}
AND AREA_NO_ID IN (
SELECT
AREA_NO_ID
FROM
dmcode.t_area_code
WHERE
(area_no_id_1 = #{AREA_NO_ID} OR area_no_id_2 = #{AREA_NO_ID} OR area_no_id = #{AREA_NO_ID})
)
ORDER BY ORG_ID_2
</if>
<if test="lvl == 4 or lvl == ''">
SELECT DISTINCT
ORG_ID_3 AS id, ORG_DSCR_3 AS `NAME`, ORG_ID_2 AS pid, 5 AS lvl, 'closed' AS state
FROM dmcode.t_org_biz_lvl
WHERE 1=1
AND ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
<if test="userType == 2 or userType == ''">
AND ORG_TYPE_ID_2 != 'A00'
</if>
<if test="userType == 1 or userType == ''">
AND ORG_TYPE_ID_2 = 'A00'
</if>
AND ORG_ID_3 != #{pid}
AND ORG_ID_2=#{pid}
AND AREA_NO_ID IN (
SELECT
AREA_NO_ID
FROM
dmcode.t_area_code
WHERE
(area_no_id_1 = #{AREA_NO_ID} OR area_no_id_2 = #{AREA_NO_ID} OR area_no_id = #{AREA_NO_ID})
)
ORDER BY ORG_ID_3
</if>
<if test="lvl == 5 or lvl == ''">
SELECT DISTINCT
ORG_ID_4 AS id, ORG_DSCR_4 AS `NAME`, ORG_ID_3 AS pid, 6 AS lvl, 'closed' AS state
FROM dmcode.t_org_biz_lvl
WHERE 1=1
AND ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
<if test="userType == 2 or userType == ''">
AND ORG_TYPE_ID_2 != 'A00'
</if>
<if test="userType == 1 or userType == ''">
AND ORG_TYPE_ID_2 = 'A00'
</if>
AND ORG_ID_4 != #{pid}
AND ORG_ID_3=#{pid}
AND AREA_NO_ID IN (
SELECT
AREA_NO_ID
FROM
dmcode.t_area_code
WHERE
(area_no_id_1 = #{AREA_NO_ID} OR area_no_id_2 = #{AREA_NO_ID} OR area_no_id = #{AREA_NO_ID})
)
ORDER BY ORG_ID_4
</if>
<if test="lvl == 6 or lvl == ''">
SELECT DISTINCT
ORG_ID_5 AS id, ORG_DSCR_5 AS `NAME`, ORG_ID_4 AS pid, 7 AS lvl, 'closed' AS state
FROM dmcode.t_org_biz_lvl
WHERE 1=1
AND ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
<if test="userType == 2 or userType == ''">
AND ORG_TYPE_ID_2 != 'A00'
</if>
<if test="userType == 1 or userType == ''">
AND ORG_TYPE_ID_2 = 'A00'
</if>
AND ORG_ID_5 != #{pid}
AND ORG_ID_4=#{pid}
AND AREA_NO_ID IN (
SELECT
AREA_NO_ID
FROM
dmcode.t_area_code
WHERE
(area_no_id_1 = #{AREA_NO_ID} OR area_no_id_2 = #{AREA_NO_ID} OR area_no_id = #{AREA_NO_ID})
)
ORDER BY ORG_ID_5
</if>
<if test="lvl == 7 or lvl == ''">
SELECT DISTINCT
ORG_ID AS id, ORG_DSCR AS `NAME`, ORG_ID_5 AS pid, 8 AS lvl, 'open' AS state
FROM dmcode.t_org_biz_lvl
WHERE 1=1
AND ORG_DEPT_MAPPING_FLAG=#{orgDeptMappingFlag}
<if test="userType == 2 or userType == ''">
AND ORG_TYPE_ID_2 != 'A00'
</if>
<if test="userType == 1 or userType == ''">
AND ORG_TYPE_ID_2 = 'A00'
</if>
AND ORG_ID != #{pid}
AND ORG_ID_5=#{pid}
AND AREA_NO_ID IN (
SELECT
AREA_NO_ID
FROM
dmcode.t_area_code
WHERE
(area_no_id_1 = #{AREA_NO_ID} OR area_no_id_2 = #{AREA_NO_ID} OR area_no_id = #{AREA_NO_ID})
)
ORDER BY ORG_ID
</if>
</if>
</select>
combotree -下拉框树异步加载的更多相关文章
- 在element-ui的select下拉框加上滚动加载
在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...
- el-select实现下拉框触底加载更多
当下拉框需要展示的数据有很多时,几千甚至上万条,一次性全部请求回来再按照特定格式比如 id-name 去处理数据的话,不论是从接口还是前端,这个性能都不是很好,会造成下拉框初次打开时响应很慢,影响用户 ...
- 实现select下拉框的无限加载(懒加载)
在实际开发中我们有时无法避免select下拉功能数据过大导致页面卡顿(如在我在一次迭代中有一个select项接口返回了5000多条数据).用户体验差!结合实际开发给出了3个解决方案: 方案1.sele ...
- 转:JQuery实现下拉框的数据加载和联动
<script type="text/javascript"> $(document).ready(function() { GetByJquery(); $(&quo ...
- 淘宝购物车页面 智能搜索框Ajax异步加载数据
如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...
- jQuery 滚动条 滚动到底部(下拉到底部) 加载数据(触发事件、处理逻辑)、分页加载数据
1.针对浏览器整个窗口滚动 主要代码: <script type="text/javascript"> ; function GetProductListPageFun ...
- jQuery WeUI 组件下拉刷新和滚动加载的实现
最近在做手机版使用到了下拉刷新和滚动加载,记录一下实现过程: 一.引入文件 ? 1 2 3 4 <link rel="stylesheet" href="Conte ...
- easyui combotree下拉框多选赋值
发现jquery.easyui.min.js 1.3.4版本的用setValues给多选下拉框赋值不成功,只能用1.3.1版本的 Html代码: <input id="ProductL ...
- Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...
随机推荐
- POJ1375 Intervals
嘟嘟嘟 题意简述:给出一个光源\((x_0, y_0)\),和一些圆,求投影区间. 这道题其实就是求经过\((x_0, y_0)\))的圆的切线. 刚开始我想到了一个用向量旋转的方法,但是写起来特别麻 ...
- iostat查看系统的IO负载情况
1.安装iostat工具: [root@localhost ~]# yum -y install sysstat 2.通过命令查看IO情况: %idle如果小于%70的话,说明磁盘的IO负载压力已经很 ...
- 到底什么是dp思想(内含大量经典例题,附带详细解析)
期末了,通过写博客的方式复习一下dp,把自己理解的dp思想通过样例全部说出来 说说我所理解的dp思想 dp一般用于解决多阶段决策问题,即每个阶段都要做一个决策,全部的决策是一个决策序列,要你求一个 最 ...
- 什么是工厂函数?Python 中工厂函数怎么理解?(转)
所谓工厂函数就是指这些内建函数都是类对象(实际上是类), 当你调用它们时,实际上是创建了一个类实例. type():查看类型
- Mac下python3配置Sklearn
服务器要有Python 环境 ,也要有Python运行的依赖包,Java与Python使用Process进程进行通讯. 安装homebrew /usr/bin/ruby -e "$(curl ...
- Angular动态表单生成(三)
ng-dynamic-forms实践篇(上) 定个小目标 先来定个小目标吧,我们要实现的效果: 动态生成一个表单,里面的字段如下: 字段名称 字段类型 验证 备注 姓名 text 必填,长度小于15 ...
- SPOJ 4487. Can you answer these queries VI splay
题目链接:点击打开链接 题意比較明显,不赘述. 删除时能够把i-1转到根,把i+1转到根下 则i点就在 根右子树 的左子树,且仅仅有i这一个 点 #include<stdio.h> #in ...
- mysql将日期字符串转换
举个例子: 给定字符串为07/31/2018,想要把格式转换成20180731 需要用到以下两个函数: date_format(date,’%Y-%m-%d’) ————–>oracle中的to ...
- 记一次jvm异常排查及优化
为方便自己查看,根据工作遇到的问题,转载并整理以下jvm优化内容 有次接到客服反馈,生产系统异常,无法访问.接到通知紧急上后台跟踪,查看了数据库死锁情况--正常,接着查看tomcat 内存溢出--正常 ...
- 数据库事务ACID特性及隔离级别
数据库ACID特性介绍 1.原子性(Atomic)一个事务被视为一个不可分割的最小工作单元,这个事务里的所有操作要么全部成功执行,要么全都不执行,不能只执行其中的一部分操作.实现事务的原子性,要支持回 ...