level 1
zouqone
楼主
最近打算做个树卡模板,ztree确实很好用。不过也遇到些问题,如刷新结点后,子结点无法获取到,获取不到子结点,就没法选择子结点。

经过debug,发现reAsyncChildNodes方法是异步请求数据的,而js执行代码是无法中断的(除了弹出信息alert、confirm 、ajax 同步请求外),这样加载子结点和选择子结点操作的先后次序就无法确定。因此,要解决异步加载数据的问题,做好的办法就把异步请求变为同步请求。查了下源码,我发现,源码上居然没有设置异步参数 async的选项,
文件 jquery.ztree.core-3.5.js

于是就手动加了各参数
async : setting.async.async==null?true:setting.async.async,

在设置下参数就ok了
var setting = {
view: { selectedMulti: false }, //,fontCss: setFontCss
async: {
enable: true, url: treeAction+"?rk="+Math.random(),type:"GET",
autoParam:["id=parentCode", "name", "level"]
,async : false,
dataFilter: filter
},
callback: { beforeClick: beforeClickZtree ,onAsyncSuccess: zTreeOnAsyncSuccess }
};
这样在获取子结点的时候就,可以获取到了。不过我不太明白,源码上为什么没设置async 参数???
效果如下:![[呵呵]](/static/emoticons/u5475u5475.png)

2015年03月30日 16点03分
1

经过debug,发现reAsyncChildNodes方法是异步请求数据的,而js执行代码是无法中断的(除了弹出信息alert、confirm 、ajax 同步请求外),这样加载子结点和选择子结点操作的先后次序就无法确定。因此,要解决异步加载数据的问题,做好的办法就把异步请求变为同步请求。查了下源码,我发现,源码上居然没有设置异步参数 async的选项,文件 jquery.ztree.core-3.5.js

于是就手动加了各参数async : setting.async.async==null?true:setting.async.async,

在设置下参数就ok了var setting = {
view: { selectedMulti: false }, //,fontCss: setFontCss
async: {
enable: true, url: treeAction+"?rk="+Math.random(),type:"GET",
autoParam:["id=parentCode", "name", "level"]
,async : false,
dataFilter: filter
},
callback: { beforeClick: beforeClickZtree ,onAsyncSuccess: zTreeOnAsyncSuccess }
};
这样在获取子结点的时候就,可以获取到了。不过我不太明白,源码上为什么没设置async 参数???
效果如下:
