首先说一件脑壳很疼的事情,就是在项目中用到了很多ztree,这块是我最头疼的,因为测试每天提的bug都是这块问题的,说来说去,就是一句话,做这些操作的时候只要刷新一下(或重新加载一下这颗树)就好了。
那么重点来了,怎样才能做到在操作节点的时候刷新这颗树呢,我尝试了很多次都不能成功,最后,终于解决了。。。。。。内心那是无比的开心呀。。。
刷新操作的时候,首先要重置这些树,并且获取到刷新之前选中的节点,刷新之后让其继续选中刷新之前选中的节点,并且展开刷新之前展开的节点。。。。好了,话不多说,上代码
// 我自己封装了一个函数,哪边用到哪边调用就好了
function refresh(){
// 获取整棵树上所有的节点
var zNodes = getPolicyList();
if ( > 0) {
var treeObj = $.("policyTree");
// 获取刷新之前选中的节点
var nodes = ();
var selectId = nodes[0].id;
// 重置树
$.($("#policyTree"), policyTreeSetting, zNodes);
// 刷新之后默认选中刷新之前的节点
var node = ("id", selectId);
(node, true);
// 刷新之后默认展开刷新之前展开的节点
var cookie = $.cookie("z_tree" + );
if (cookie) {
z_tree = (cookie);
for (var i = 0; i < z_tree.length; i++) {
var node = ('id', z_tree[i]);
(node, true, false);
}
}
}
}
注意:此处需要用到,导入这个js,默认展开的才会展开
除此之外,还需要用到两个函数,在ztree的callback中写,相信用过ztree的人都懂
callback:{
onExpand: onExpand,//刷新时展开节点
onCollapse: onCollapse//刷新时关闭节点
}
/**
* 刷新节点后默认打开原来的位置
* @param event
* @param treeId
* @param treeNode
*/
function onExpand(event, treeId, treeNode) {
var cookie = $.cookie("z_tree" + );
var z_tree = new Array();
if (cookie) {
z_tree = (cookie);
}
if ($.inArray(, z_tree) < 0) {
z_tree.push();
}
$.cookie("z_tree" + , (z_tree))
}
/**
* 刷新节点后关闭节点的位置
* @param event
* @param treeId
* @param treeNode
*/
function onCollapse(event, treeId, treeNode) {
var cookie = $.cookie("z_tree" + );
var z_tree = new Array();
if (cookie) {
z_tree = (cookie);
}
var index = $.inArray(, z_tree);
z_tree.splice(index, 1);
for (var i = 0; i < ; i++) {
index = $.inArray([i].id, z_tree);
if (index > -1) z_tree.splice(index, 1);
}
$.cookie("z_tree" + , (z_tree))
}
好吧,一个完完整整的关于ztree刷新整棵树,刷新完之后选中之前选中的节点,展开之前展开的节点就这样实现了!