(补充: 计划 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....
ZTree v3.x (JQuery Tree插件)
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 v3.x (JQuery Tree插件).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...
最近项目中有一个比较大型的树节点加载,网上面也看过一些解决方案,感觉都不是很好,也有很多误区,比如单击节点时加载子...ztree fileter方法是在每次展开时都会执行,所以根据不同的请求达到异步加载子节点的需求。
ztree实现模糊查询需要的依赖包:jquery.ztree.exhide.js
它与 IE、FireFox、Chrome 等浏览器保持兼容,在一个页面内可同时生成多个Tree 实例,支持一次性静态生成和Ajax 异步加载两种方式,能够响应和反馈多种事件。它提供了个性化的定制服务,支持灵活的参数配置,用户...
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...
用于生成树形组件,javaScript的一个插件,用于使用树形的下拉组件!
ztree实现异步加载,使用java语言
zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。
jquery ztree 异步动态加载部署直接运行,大数据量,异步是很好的处理方式
ztree添加功能,使其支持字体图标,核心文件jquery.ztree.core.js,欢迎下载。
zTree v3.0 正式版在功能、性能方便比 v2.x 版本都有了很多改善,尤其是性能方面。...但还要再提提醒大家,v3.0 在代码架构上的改动较大,所以升级 v2.x 版本的 zTree 必须要配合修改代码,不能仅仅升级 js 文件。
该资源原理说明与博客《异步&同步加载树节点----zTree(一)》相一致。
zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀 兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器 支持 JSON ...
ztree异步加载demo,ztree异步加载demo.ztree异步加载demo
zTree v3.5.37 API 文档 setting 配置详解 zTree 方法详解