前言
zTree 是一个依靠 jQuery 实现的多功能 “树插件”。
网址:http://www.ztree.me/v3/main.p...
上回说到,在大型项目中,往往需要不同的用户看到不同的目录,不同的地区显示不同的目录等等,面对这些庞大的数据,需要生成不同结构的树目录,你不能一个一个定义这些配置来满足那么多数据需求,这就需要异步加载子节点的的父节点,通过构造treeNode的 JSON 数据对象
方法来实现,如果你不嫌我啰嗦,接下来会给大家讲述这个方法。
setting配置
按照如下配置来构造ztree:
//树初始化
var myTreeSetting = {
view: {
showLine: true,
selectedMulti: false,
dblClickExpand: false
},
async: {
enable: true,
type: "get",
dataType:"json",
url:"/server/basic/major/info/findmajortree.json",
autoParam:["id=pId"],
dataFilter: filter
},
data: {
simpleData: {
enable: true,
idKey:"id",
pIdKey:"pId",
rootPId:0
}
}
};
解释:
-
setting.async.url
[ 依赖jquery.ztree.core
]
Ajax 获取数据的 URL 地址,默认值:"".设置固定的异步加载 url请注意地址的路径,确保页面能正常加载。
url 内也可以带参数,这些参数就只能是通过 get方式提交了,并且请注意进行data格式。不同的树目录根据不 同的数据,在服务器端编写好不同的url,将其配置在这里即可。 -
setting.async.dataType
[ 依赖jquery.ztree.core
]Ajax
获取的数据类型,默认值:"text"
。这里我使用了json
。 -
setting.async.dataFilter
[ 依赖jquery.ztree.core
]
用于对Ajax
返回数据进行预处理的函数。之后代码中会给出filter
的定义。
详细说明参见:zTree API 文档 http://www.ztree.me/v3/api.php
代码
html:
还是zTree -- jQuery 树插件 使用方法与例子中的那个html,不在重复粘贴, 。
js:
var treeNodes;
$(document).ready(function() {
initTree($('#planTree'));
});
//树初始化
var myTreeSetting = {
view: {
showLine: true,
selectedMulti: false,
dblClickExpand: false
},
async: {
enable: true,
type: "get",
dataType:"json",
url:"/server/basic/major/info/findmajortree.json",
autoParam:["id=pId"],
dataFilter: filter
},
data: {
simpleData: {
enable: true,
idKey:"id",
pIdKey:"pId",
rootPId:0
}
}
};
//初始化树,包括回调函数
function initTree(anchor){
//初始化节点
treeNodes = $.fn.zTree.init(anchor, classTreeSetting);
}
function filter(treeId, parentNode, childNodes) {
if (!childNodes) return null;
for (var i=0, l=childNodes.length; i
如此,就可以实现了。
任它数据再多,树结构再复杂,这一个js就足以配置许多想要的书目录了。
效果如下:
后记
在页面上放这样一个树目录当然不是为了放在那里观看的,例如,你想要点击树中的某个节点,页面上的列表数据刷新为对应的数据,等功能,都可以通过以下方法来完成。
在myTreeSetting
中配置 callback
,定义点击事件。
callback: {
beforeClick: getCurrentNode,
onClick : zTreeOnClick
}
在js中定义这些函数:
function getCurrentNode(treeId, treeNode) {
curNode = treeNode;
zTreeOnClick(curNode);
}
function zTreeOnClick(treeNode){
//此处编写需要完成的业务逻辑代码
}