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 ...
随机推荐
- Running Protractor Tests on Docker
配置这个Protractor环境真是折磨死人了,webdriver-manage update怎么都不成功,即使自己下载好chromederiver放到相应文件夹下,也不能使用.费时三四天终于按照ht ...
- mvvm模型
- P2059 [JLOI2013]卡牌游戏
题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把 ...
- UVA10125 Sumsets
嘟嘟嘟 很简单的折半搜索. 把式子变一下型,得到\(a + b = d - c\). 然后枚举\(a, b\),存到\(map\)里,再枚举\(c, d\)就好了. \(map\)以\(a,b\)两数 ...
- 【jQuery】deferred对象了解
deferred对象就是jQuery的回调函数解决方案,在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行. 它 ...
- PAT——1037. 在霍格沃茨找零钱
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.”现在,给定 ...
- 多线程简单案例 - join( ) -lock()
join() 在调用结束前,主线程不会结束 不加的话,主线程会在子线程结束前继续执行:加了join(),主线程会等待子线程结束后在继续执行下去 #python3 #main print number ...
- 【腾讯敏捷转型No.6】如何打造称手的敏捷工具
通常情况下,大家对于敏捷的感受就是:大家一起来开站立晨会啦!然后一大早,大家拿着早餐,围成一个圈,听一个人在讲话. 在很多公司,决定采用敏捷之后,都会从晨会开始,因为很多人觉得敏捷其它模块都很难学习, ...
- 纸质文稿如何生成PDF
步骤: (1) 将即将要转换的文稿单张向下放入打印机. (2) 将打印设备(打印机)连接至你的电脑. (3) 打开控制面板,点击"查看设备和打印机". (4) 找到你当前的打印设备 ...
- Objective-C 之深拷贝和浅拷贝
3月箴言 人的思想是了不起的,只要专注于某一项事业,就一定会做出使自己感到吃惊的成绩来.—— 马克·吐温 1.iOS中关于深拷贝和浅拷贝的概念 浅拷贝:浅拷贝并不拷贝对象本身,只是对指向对象的指针进行 ...