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

发布于 2021-12-04 22:39:12 字数 274 浏览 900 评论 10

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

醉生梦死 2021-12-10 02:29:56

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

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

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

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

自此以后,行同陌路 2021-12-10 02:29:56

引用来自“zTree”的评论

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

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

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

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

奢望 2021-12-10 02:29:51

初见你 2021-12-10 02:29:48

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

眼眸里的那抹悲凉 2021-12-10 01:37:39

http://www.treejs.cn/v3/demo.php#_306 请仔细研究 Demo 源码

简单气质女生网名 2021-12-10 01:37:24

回复
@zTree : 大神这个问题我也碰到了,,请问怎么解决呢?就是tree设置为异步加载,在给某给未展开过的节点添加子节点时,添加出来的节点没有ztree的属性,而且调用editName无法进入编辑状态,请问这个是怎么回事呢?

自此以后,行同陌路 2021-12-09 20:07:29

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

无人问我粥可暖 2021-12-09 11:18:12

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

泪冰清 2021-12-07 05:36:36

看下面的评论,我之前给你讲错了,非常抱歉。。。

勿忘初心 2021-12-07 04:39:07

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文