level 1
个人实现zTree默认按照链路打开加载异步节并选中最后节点,
感觉zTree是一个很棒的树,看了帖子最近也很多人在问这个问题,个人写了一套实现方式
很简单,希望大家能给出一些改进!
如下:
2013年04月15日 09点04分
1
level 1
首先是链路JS 上传附件容易失效,我这里直接贴代码了
loadLinked.js
if(typeof mochaGlobal == "undefined") mochaGlobal = new Object();
mochaGlobal.LoadLinked = function(path)
{
//加载路径
this.linkedPath = path;
//加载数组
this.linkedPathList = this.linkedPath.split("/");
//加载是否结束
this.loadStatus = false;
//当前加载下标
this.loadIndex = 0;
//本次加载最大次数
this.loadMaxSize = this.linkedPathList.length;
} mochaGlobal.LoadLinked.prototype = {
getNextPath:function(){
if(this.loadIndex == this.loadMaxSize-1){
this.loadStatus = true;
}
if(this.loadStatus){
return this.linkedPathList[this.loadIndex];
}else{
return this.linkedPathList[this.loadIndex++];
}
}
,
getLoaclPathIndex:function(){return this.loadIndex;}
};
var LoadLinked = mochaGlobal.LoadLinked;
2013年04月15日 09点04分
2
level 1
实现的基本思路就是
异步加载的时候在后台传回一个参数 类似 A/B/C/D/E/F 然后
实例化一个链路
var linkedList = new LoadLinked('A/B/C/D/E/F');
个人建议 linkedList 作为本页面的全局变量 这样就不仅可以加载一次,可以多次生成新链路让ZTREE继续加载(本例子就是作为一个全局变量来写的)
然后就是重写ZTREE的setting.callback.onAsyncSuccess回调函数
function zTreeLoadSuccess(event, treeId, treeNode, msg) {
//加载后动作
//这里linkedList 就是作为一个全局变量如果检测到linkedList 不为空则进行链路加载
if(linkedList != null && typeof(linkedList) != 'undefined'){
var zTree = $.fn.zTree.getZTreeObj(treeId);
//sid 我这里node加载的唯一标示SID(可以理解为简单数据模式下的SID)
var sid = linkedList.getNextPath();
var node = zTree.getNodeByParam("sid", sid);
//判断是否存在需要展开的节点,如果没有继续链路展开
if(node != null && typeof(node) != 'undefined'){
//判断是否是最终需要选定的节点
if(linkedList.loadStatus){//选中节点
zTree.selectNode(node);
linkedList =null;
}else{
zTree.reAsyncChildNodes(node, "refresh");
}
}
}
};
2013年04月15日 09点04分
3
level 1
这个方法涉及到一个问题,就是自动加载的时候不能去点开任何节点,否则就会乱套,我这里是自动加载的时候会给树上加一层遮罩等其加载完毕后再把遮罩去掉。
2013年04月15日 09点04分
4