(补充: 计划 v3.1 中修改进行异步加载的逻辑: 父节点默认状态下只能异步加载一次,除非 使用 reAsyncChildNodes 方法强行进行异步加载。这样也就不会出现这个要讨论的错误了。)
zTree v3.0 对于可编辑模式 和 异步加载模式共存的处理做了一些完善,从而也会导致使用原先 v2.x 实现的方法放在 v3.0 下出现异常。
这里针对 onAsyncSuccess 回调函数中 使用 addNodes 添加节点 的问题做一个详细说明。
错误现象(此问题由:overlord 朋友提供):
利用Demo中的 async.html 做测试,让 setting 中增加 onAsyncSuccess 的配置,代码如下:
onAsyncSuccess:function(event, treeId, treeNode, msg){//如果没有加载到子结点就会执行多次
console.log("onAsyncSuccess...");
var da = $.fn.zTree.getZTreeObj("treeDemo").addNodes(treeNode,{name:'你好',isParent:true}, true);
}
A、如果异步加载的地址只能输出 [],表明是空结果,这样会发现根节点显示正常,只有一个“你好”的节点,但如果点击展开“你好”节点后,会发现会自动添加 3 个“你好”的子节点。
B、如果异步加载能过输出正常节点数据,那么不会出现此问题,每次异步加载后都只添加 1 个 "你好" 的子节点。
为何如此使用?
我个人推断,是因为 v2.x 中添加子节点时,父节点不会自动异步加载已有的子节点,所以利用expandNode方法让父节点展开,同时捕获 asyncSuccess 方法确认加载完毕 并 添加新的子节点。
(v3.0 中完全不需要这么操作,只需要直接使用 addNodes 方法,zTree 会自动先去异步加载已有的子节点,然后再添加新的子节点。)
因此,我要说对于 v3.0 来说,要尽量避免在 onAsyncSuccess 回调中使用 addNodes、reAsyncChildNodes 这两个方法,因为如果使用不当有可能会造成事务流程的多次循环。
如果你有兴趣做深入了解,请先看看 v2.x 和 v3.0 中针对 addNodes 和 expandNode 两个操作的事务流程图
当你理解的上面的流程图以后,再看看针对这个错误制作的事务流程图,就会明白为何会产生3个节点了。(其中每种颜色代表了一次线程的操作过程)
这里特别感谢
overlord 和 czwlucky 两位朋友的大力协助。 同时也希望大家能一起讨论这个问题。
分享到:
相关推荐
jquery-1.4.4.min.js jquery.ztree.exhide.min.js jquery.ztree.exedit.min.js jquery.ztree.excheck.min.js jquery.ztree.core.min.js jquery.ztree.all.min.js jquery-1.4.4.js jquery.ztree.exhide.js jquery....
4. **节点操作**:ZTree提供了丰富的API接口,用于对树进行操作,如添加节点(`treeObj.addNodes()`)、删除节点(`treeObj.removeNode()`)、选择节点(`treeObj.selectNode()`)、展开/折叠节点(`treeObj....
6. **API接口**:提供了一系列的API接口,用于在运行时动态操作树,如zTree.init()初始化树,zTree.expandNode()展开节点,zTree.selectNode()选择节点等。 7. **CSS样式自定义**:支持自定义样式,可以通过修改或...
zTree3.x.rar zTree3.x.rar zTree3.x.rar zTree3.x.rar zTree3.x.rar zTree3.x.rar zTree3.x.rar zTree3.x.rar
ztree实现模糊查询需要的依赖包:jquery.ztree.exhide.js
.ztree li span.button.chk.checkbox_false_full { background-position: -5px -5px; } .ztree li span.button.chk.checkbox_false_full_focus { background-position: -5px -26px; } .ztree li span.button.chk...
1. **异步加载**:zTree支持懒加载机制,可以按需加载子节点数据,减少初次加载时的数据量,提高页面响应速度。 2. **复选/单选**:zTree提供了复选框和单选按钮功能,允许用户多选或单选节点,同时支持全选、反选...
9. **createNode**: 创建新的节点,适用于动态添加节点。 10. **updateNode**: 更新已存在的节点,包括文本、图标等信息。 以上仅为 zTree API 的部分关键点,实际应用中可能涉及更多细节和高级功能,如拖放排序、...
最近项目中有一个比较大型的树节点加载,网上面也看过一些解决方案,感觉都不是很好,也有很多误区,比如单击节点时加载子...ztree fileter方法是在每次展开时都会执行,所以根据不同的请求达到异步加载子节点的需求。
ZTree的一个显著特性是支持异步加载,这意味着它可以在用户需要时按需加载子节点,减少了初次加载时的数据量,提高了页面响应速度。本文将详细讲解如何使用Java来实现ZTree的异步加载功能。 首先,我们需要理解...
ZTree通过异步加载策略,只在用户展开某个父节点时请求服务器获取该节点的子节点数据,这样可以显著减少网络传输的负担。 **3. 实现异步加载** 在ZTree中,实现异步加载需要配置相应的参数。主要涉及以下几个关键...
它与 IE、FireFox、Chrome 等浏览器保持兼容,在一个页面内可同时生成多个Tree 实例,支持一次性静态生成和Ajax 异步加载两种方式,能够响应和反馈多种事件。它提供了个性化的定制服务,支持灵活的参数配置,用户...
要解决异步加载添加子节点时的重复问题,关键在于正确地处理与父节点的交互逻辑。在zTree中,当用户通过某种交互方式请求添加一个子节点时(例如通过点击添加按钮),我们需要确保该节点的添加是基于当前的父节点...
在IT领域,尤其是在前端开发中,构建用户友好的...理解并掌握异步加载的原理和配置,对于优化zTree的使用至关重要,也是前端开发中的重要技能之一。通过实践和不断探索,开发者可以更好地利用zTree来满足各种项目需求。
ztree demo jquery.ztree,jquery.ztree.core.js,jquery.ztree.core-3.5.min.js,jquery.ztree.excheck-3.5.min.js,jquery.ztree.all.min.js,jquery.ztree.exedit.js,jquery.ztree.exhide.min.js,jquery-1.4.4.min...
4. 更新日志2.x.txt:记录了zTree v2.x版本的主要更新内容和修复的问题,可以帮助开发者了解新版本的改进,决定是否需要升级。 5. im286.com.txt:可能是官方网站的链接或者版权信息,具体作用需要查看文件内容来...
用于生成树形组件,javaScript的一个插件,用于使用树形的下拉组件!
是一个js文件,zTree实现权限分配所需,可去ztree官网自行下载
是一个js,ztree实现权限管理所需的,可自行去ztree官网下载