问题:

  下拉树数据比较多时,全加载会产生页面延迟,需要实现异步加载

方案:

  点击事件加载:先加载部分,点击节点时再展开并追加子节点 

  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 -下拉框树异步加载的更多相关文章

  1. 在element-ui的select下拉框加上滚动加载

    在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...

  2. el-select实现下拉框触底加载更多

    当下拉框需要展示的数据有很多时,几千甚至上万条,一次性全部请求回来再按照特定格式比如 id-name 去处理数据的话,不论是从接口还是前端,这个性能都不是很好,会造成下拉框初次打开时响应很慢,影响用户 ...

  3. 实现select下拉框的无限加载(懒加载)

    在实际开发中我们有时无法避免select下拉功能数据过大导致页面卡顿(如在我在一次迭代中有一个select项接口返回了5000多条数据).用户体验差!结合实际开发给出了3个解决方案: 方案1.sele ...

  4. 转:JQuery实现下拉框的数据加载和联动

    <script type="text/javascript"> $(document).ready(function() { GetByJquery(); $(&quo ...

  5. 淘宝购物车页面 智能搜索框Ajax异步加载数据

    如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...

  6. jQuery 滚动条 滚动到底部(下拉到底部) 加载数据(触发事件、处理逻辑)、分页加载数据

    1.针对浏览器整个窗口滚动 主要代码: <script type="text/javascript"> ; function GetProductListPageFun ...

  7. jQuery WeUI 组件下拉刷新和滚动加载的实现

    最近在做手机版使用到了下拉刷新和滚动加载,记录一下实现过程: 一.引入文件 ? 1 2 3 4 <link rel="stylesheet" href="Conte ...

  8. easyui combotree下拉框多选赋值

    发现jquery.easyui.min.js 1.3.4版本的用setValues给多选下拉框赋值不成功,只能用1.3.1版本的 Html代码: <input id="ProductL ...

  9. Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView

    在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...

随机推荐

  1. 本地缓存和redis

    项目中的传统架构在服务启动时 读取数据库的大部分数据到本地内存,在看到redis的作用时发出疑问,到底有什么样的区别以及怎么选择呢,下面是别人的回答 使用本地缓存快还是使用redis缓存好? Redi ...

  2. android--简单的发短信功能

    一.准备字符资源 <string name="tip_phone">请输入电话号码</string> <string name="tip_s ...

  3. JAVAWEB之文件的上传下载

    文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...

  4. angularJs的工具方法2

    一.angular.isArray     判断是否是数组 var a = []; console.log(angular.isArray(a)); //判断参数里面的是否是数组 二.angular. ...

  5. Java50道经典习题-程序21 求阶乘

    题目:求1+2!+3!+...+20!的和分析:使用递归求解 0的阶乘和1的阶乘都为1 public class Prog21{ public static void main(String[] ar ...

  6. centos上nginx的安装

    安装步骤:   1.下载nginx,执行:wget http://nginx.org/download/nginx-1.10.2.tar.gz 2.解压,执行:tar vxzf nginx-1.10. ...

  7. 浅谈MVP架构及开发模式

    Model-View-Presenter(MVP)概述    MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成 ...

  8. Luogu_2774 方格取数问题

    Luogu_2774 方格取数问题 二分图最小割 第一次做这种题,对于某些强烈暗示性的条件并没有理解到. 也就是每一立刻理解到是这个图是二分图. 为什么? 横纵坐标为奇数的只会和横纵坐标为偶数的相连. ...

  9. [Luogu2622]关灯问题$||$(状压$DP$)

    #\(\color{red}{\mathcal{Description}}\) \(Link\) 现有\(n\)盏灯,以及\(m\)个按钮.每个按钮可以同时控制这\(n\)盏灯--按下了第i个按钮,对 ...

  10. Centos7在线安装MySQL

    wget dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpmyum localinstall mysql57-community- ...