zTree异步加载 和 节点新增问题
@zTree 你好,想跟你请教个问题:异步树在未展开(没加载子节点)的情况下,使用addNodes方法增加节点时,返回节点数据只有我自己添加的属性,没包含zTree自身的相关属性,如tId和parentTId。由于第一次新增会自动加载子节点展开,所以再次新增时,返回的数据又正确包含了zTree自身属性。不知道是我漏了什么,请问这种情况怎么解决呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
我知道原因了,你举得例子非常有代表性!
总的来说,这是 zTree 陈旧的架构导致的,因为早先基本上没有什么异步的概念,以前的异步基本上就是 异步加载 主要来使用。。。所以 所有的方法基本上都是同步的。 但 addNodes 为了支持 异步加载,又支持了异步操作(当异步完成后才会将新数据进行处理),但方法本身是同步执行,导致立刻返回的数据就是还未进行过加工的结果。。。。
为了避免这种情况,建议你在执行 addNodes 之前,先确认该父节点是否已经进行过异步加载(参考 zAsync 属性),如果没有,则先让其加载(reAsyncChildNodesPromise 方法),然后再执行 addNodes。
目前的架构只能这样勉强处理一下,以后应该让这些方法都采用回调的方式就能很好的避免此类问题了
引用来自“zTree”的评论
我知道原因了,你举得例子非常有代表性!
总的来说,这是 zTree 陈旧的架构导致的,因为早先基本上没有什么异步的概念,以前的异步基本上就是 异步加载 主要来使用。。。所以 所有的方法基本上都是同步的。 但 addNodes 为了支持 异步加载,又支持了异步操作(当异步完成后才会将新数据进行处理),但方法本身是同步执行,导致立刻返回的数据就是还未进行过加工的结果。。。。
为了避免这种情况,建议你在执行 addNodes 之前,先确认该父节点是否已经进行过异步加载(参考 zAsync 属性),如果没有,则先让其加载(reAsyncChildNodesPromise 方法),然后再执行 addNodes。
目前的架构只能这样勉强处理一下,以后应该让这些方法都采用回调的方式就能很好的避免此类问题了
我也碰到这个问题了,不知道怎么解决。。。
http://www.treejs.cn/v3/demo.php#_306 请仔细研究 Demo 源码
回复
@zTree : 大神这个问题我也碰到了,,请问怎么解决呢?就是tree设置为异步加载,在给某给未展开过的节点添加子节点时,添加出来的节点没有ztree的属性,而且调用editName无法进入编辑状态,请问这个是怎么回事呢?
那怎么让新增出来的节点默认为编辑状态呢?
那怎么让新增出来的节点默认为编辑状态呢?
看下面的评论,我之前给你讲错了,非常抱歉。。。
请仔细检查代码, addNodes 方法返回的数据肯定是已经加入到 zTree 内部的节点数据,肯定会有 tId 这种属性的。