zTree节点内部计数问题
ztree吧
全部回复
仅看楼主
level 1
blackey629 楼主
今天应用测试,发现一个zTree内部的小bug,不知道有没有碰到的。
zTree内部有一个计数变量,与zTree的id拼接在一起,如ot_1作为节点的唯一标识。项目需要根据一定的条件重新生成页面上的树,但是这个计数是页面全局变量,所以重新生成的树节点的id为继续累加值,而节点持有的父节点的引用还是原来的id,导致node.getParentNode()返回值为null。望求证问题
2013年01月11日 02点01分 1
level 1
blackey629 楼主
我已经把问题修改了,在.fn.zTree.init中将zId首先重置,就ok了
2013年01月11日 03点01分 2
level 11
hi,你这个有问题哟。。。出现你这个问题只能说是你持有的节点引用是之前的节点数据,而不是刷新后的节点数据。。。。你这么修改后,对于初始化顺序一致的节点来说是可以的,一旦初始化循序出现不同就会异常。
错误情况1:
根节点 A、B、C、D 加载后,tId 分别是 1、2、3、4
重新加载时,比如后台数据变化,有了 B1, 从而变成 A、B、B1、C、D, 这样 C、D 的id 就会变成 4、5; 用你的逻辑进行处理,会依然用4去寻找 D ,但你会发现找到的是 C;
错误情况2:
根节点 A、B、C、D 以及相应的子节点都进行了加载, 一旦 A 中的 子节点个数有变化,那么B、C、D 以及他们的子节点 tId 会全部改变,同样会破坏你之前保留的tId
错误情况3:
异步加载模式下,根节点 A、B、C、D 加载后,第一次展开A,可以得到A的子节点 A1/A2/A3,然后再展开 B, 可以得到B的子节点B1/B2/B3;
当你刷新后, 如果先展开B后展开A,那么这些子节点的tId 同样会改变
错误例子还可以举出很多种。。。就不一一叙述了,总之 tId 的作用不是为了让你保证树刷新前后寻找同一节点的索引值,他只是zTree 内部用于保证节点唯一的索引; 你需要利用 自己数据中的id 来进行真正节点的查找,利用 getNodeBy。。。。 和 getNodesBy。。。 这几个方法去进行查找。
2013年01月11日 07点01分 3
谢谢z哥的耐心回复,我按照你说的修改一下
2013年01月22日 08点01分
回复 blackey629 :还想问问,为什么我重新生成树之后,还会引用原来的的节点数据呢,既然重新生成,应该都是全新的才对啊
2013年01月22日 09点01分
回复 blackey629 :?? 怎么个引用原来的节点数据呢? 应该就是全新的呀
2013年01月22日 09点01分
1