jEasyUI 树形网格惰性加载节点学习笔记
什么是惰性加载?
惰性加载也叫延迟加载,指的是在需要的时候才加载数据,而不是一次性加载所有数据。这样可以减轻服务端负担,提高页面渲染速度。
如何实现树形网格的惰性加载?
jEasyUI 是一款常用的 UI 框架,在其树形网格组件中提供了惰性加载节点的功能。实现方法如下:
- 在树形结构的节点属性中设置
state
属性为closed
,表示该节点默认处于关闭状态,不加载子节点。 - 在设置树形网格的
loadFilter
属性中,编写回调函数,该函数可以根据需要对数据进行处理,过滤出需要显示的节点数据。 - 在
onClick
事件中,通过调用treegrid
的reload
方法,动态加载当前节点的子节点数据。
具体实现代码如下所示:
htmlCopy Code<div id="treegrid"></div>
javascriptCopy Code$('#treegrid').treegrid({
url: 'data.json',
idField: 'id',
treeField: 'name',
loadFilter: function(data, parentId) {
// 过滤出需要显示的节点数据
var nodes = [];
for (var i=0; i<data.length; i++) {
var node = data[i];
if (node.parentId == parentId) {
nodes.push(node);
}
}
return nodes;
},
onClick: function(row) {
var node = $('#treegrid').treegrid('find', row.id);
if (node.state == 'closed') {
// 加载子节点数据
$('#treegrid').treegrid('reload', row.id);
// 更新节点状态为打开状态
$('#treegrid').treegrid('expand', row.id);
} else {
// 更新节点状态为关闭状态
$('#treegrid').treegrid('collapse', row.id);
}
}
});
实例演示
下面是一个简单的 demo,演示了 jEasyUI 树形网格惰性加载节点的效果。点击父节点时,会动态加载子节点数据。
htmlCopy Code<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jEasyUI 树形网格惰性加载节点学习笔记</title>
<link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/jquery-easyui/1.9.22/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/jquery-easyui/1.9.22/themes/icon.css">
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.bootcss.com/jquery-easyui/1.9.22/jquery.easyui.min.js"></script>
</head>
<body>
<div id="treegrid"></div>
<script type="text/javascript">
$('#treegrid').treegrid({
url: 'data.json',
idField: 'id',
treeField: 'name',
loadFilter: function(data, parentId) {
// 过滤出需要显示的节点数据
var nodes = [];
for (var i=0; i<data.length; i++) {
var node = data[i];
if (node.parentId == parentId) {
nodes.push(node);
}
}
return nodes;
},
onClick: function(row) {
var node = $('#treegrid').treegrid('find', row.id);
if (node.state == 'closed') {
// 加载子节点数据
$('#treegrid').treegrid('reload', row.id);
// 更新节点状态为打开状态
$('#treegrid').treegrid('expand', row.id);
} else {
// 更新节点状态为关闭状态
$('#treegrid').treegrid('collapse', row.id);
}
}
});
</script>
</body>
</html>
data.json 文件内容如下:
jsonCopy Code[
{
"id": 1,
"name": "node1",
"parentId": 0,
"state": "closed"
},
{
"id": 2,
"name": "node2",
"parentId": 0,
"state": "closed"
},
{
"id": 3,
"name": "node3",
"parentId": 1,
"state": "closed"
},
{
"id": 4,
"name": "node4",
"parentId": 1,
"state": "closed"
},
{
"id": 5,
"name": "node5",
"parentId": 2,
"state": "closed"
},
{
"id": 6,
"name": "node6",
"parentId": 2,
"state": "closed"
},
{
"id": 7,
"name": "node7",
"parentId": 3
},
{
"id": 8,
"name": "node8",
"parentId": 3
},
{
"id": 9,
"name": "node9",
"parentId": 4
},
{
"id": 10,
"name": "node10",
"parentId": 4
},
{
"id": 11,
"name": "node11",
"parentId": 5
},
{
"id": 12,
"name": "node12",
"parentId": 5
},
{
"id": 13,
"name": "node13",
"parentId": 6
},
{
"id": 14,
"name": "node14",
"parentId": 6
}
]
打开浏览器访问该页面,即可看到树形网格组件。点击父节点时,子节点数据会被动态加载。
总结
jEasyUI 树形网格惰性加载节点功能可以优化页面性能,降低服务端压力。使用简单,只需通过设置节点属性和编写回调函数即可实现。