zTree异步加载 和 节点新增问题

倾角凌一 发布于 2017/02/28 18:00
阅读 1K+
收藏 0

@zTree 你好,想跟你请教个问题:异步树在未展开(没加载子节点)的情况下,使用addNodes方法增加节点时,返回节点数据只有我自己添加的属性,没包含zTree自身的相关属性,如tId和parentTId。由于第一次新增会自动加载子节点展开,所以再次新增时,返回的数据又正确包含了zTree自身属性。不知道是我漏了什么,请问这种情况怎么解决呢?

加载中
0
zTree
zTree

请仔细检查代码, addNodes 方法返回的数据肯定是已经加入到 zTree 内部的节点数据,肯定会有 tId 这种属性的。

zTree
zTree
看下面的评论,我之前给你讲错了,非常抱歉。。。
苏先森丶丶
苏先森丶丶
那怎么让新增出来的节点默认为编辑状态呢?
0
苏先森丶丶
苏先森丶丶

那怎么让新增出来的节点默认为编辑状态呢?

忆往昔思未来丶
忆往昔思未来丶
回复 @zTree : 大神这个问题我也碰到了,,请问怎么解决呢?就是tree设置为异步加载,在给某给未展开过的节点添加子节点时,添加出来的节点没有ztree的属性,而且调用editName无法进入编辑状态,请问这个是怎么回事呢?
zTree
zTree
http://www.treejs.cn/v3/demo.php#_306 请仔细研究 Demo 源码
0
忆往昔思未来丶
忆往昔思未来丶

我也碰到这个问题了,不知道怎么解决。。。

0
忆往昔思未来丶
zTree
zTree
内容太多,写不下,请你看我后面的评论
0
zTree
zTree

我知道原因了,你举得例子非常有代表性!

总的来说,这是 zTree 陈旧的架构导致的,因为早先基本上没有什么异步的概念,以前的异步基本上就是 异步加载 主要来使用。。。所以 所有的方法基本上都是同步的。 但 addNodes 为了支持 异步加载,又支持了异步操作(当异步完成后才会将新数据进行处理),但方法本身是同步执行,导致立刻返回的数据就是还未进行过加工的结果。。。。

为了避免这种情况,建议你在执行 addNodes 之前,先确认该父节点是否已经进行过异步加载(参考 zAsync 属性),如果没有,则先让其加载(reAsyncChildNodesPromise 方法),然后再执行 addNodes。

目前的架构只能这样勉强处理一下,以后应该让这些方法都采用回调的方式就能很好的避免此类问题了

0
忆往昔思未来丶
忆往昔思未来丶

引用来自“zTree”的评论

我知道原因了,你举得例子非常有代表性!

总的来说,这是 zTree 陈旧的架构导致的,因为早先基本上没有什么异步的概念,以前的异步基本上就是 异步加载 主要来使用。。。所以 所有的方法基本上都是同步的。 但 addNodes 为了支持 异步加载,又支持了异步操作(当异步完成后才会将新数据进行处理),但方法本身是同步执行,导致立刻返回的数据就是还未进行过加工的结果。。。。

为了避免这种情况,建议你在执行 addNodes 之前,先确认该父节点是否已经进行过异步加载(参考 zAsync 属性),如果没有,则先让其加载(reAsyncChildNodesPromise 方法),然后再执行 addNodes。

目前的架构只能这样勉强处理一下,以后应该让这些方法都采用回调的方式就能很好的避免此类问题了

哇,这个问题我已经提了3个月,大神居然还记着,真是叫人感动!我之前为了解决这个问题使用了定时器,这下看来有一条明路了。

返回顶部
顶部