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 ...
随机推荐
- iOS中 Proxy和的delegate区别
在ios中使用proxy代理模式,经常容易和delegate委托模式混淆. 委托模式(delegate),是简单的强大的模式,可让一个对象扮演另外对象的行为.委托对象保持到另外对象的引用,并在适当的时 ...
- JavaScript浏览器检测之客户端检测
客户端检测一共分为三种,分别为:能力检测.怪癖检测和用户代理检测,通过这三种检测方案,我们可以充分的了解当前浏览器所处系统.所支持的语法.所具有的特殊性能. 一.能力检测: 能力检测又称作为特性检测, ...
- ApplicationEventMulticaster接口笔记
ApplicationEventMulticaster 这个接口可以管理很多个ApplicationListener对象.并将事件发布给这些监听器. ApplicationEventPublisher ...
- 最大传输单元MTU
http://baike.baidu.com/link?url=mU41JFjZzOb3R5crQFCNdocT5ovAswcoIqL2A4U6O5Re_U0-HIYndHG0vSKwc6HbptvH ...
- sqoop2启动client异常
java环境: java version "10.0.1" ,启动sqoop-shell端或者是sqoop-client端异常,异常如下: [root@hadoop1 home] ...
- 基于mysql的基准测试
常用的基准测试工具介绍: mysql基准测试工具: mysqlslap,mysql自带的工具,对于性能测试不建议使用 特点: 可以模拟服务器负载,并输出相关统计信息 可以指定也可以自动生成查询语句 常 ...
- 调试libRTMP代码来分析RTMP协议
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写.该协议基于TCP,是一个协议族,常用在视频直播领域.RTMP协议的默认端口是1935. 学习一个协议 ...
- font-failmly字体对应
- 小程序发微信红包后端Nodejs实现
前提条件 1.有一个微信开放平台 https://open.weixin.qq.com/ 2.有一个微信公众平台 https://mp.weixin.qq.com 并且开通微信支付 3.有一个微信小 ...
- 【.net开发者自学java系列】使用Eclipse开发SpringMVC(2)
大概熟悉了 Eclipse. 然后先上Spring MVC 官网看看. 可是英文太差?翻译咯.现在翻译可屌了,真高兴生活在现在科技发达的时代.活着在中国太美好了. 没出过国门就能看懂英文.我都崇拜自己 ...