EasyUI的combotree设置值问题

奥思刘冬 发布于 2014/09/04 15:31
阅读 6K+
收藏 0

如图,用EasyUI的combotree做了个树形下拉框。是异步的。点父节点加载子节点。取值的时候没有问题。

问题在下面

就是往表单里设置值的时候,如果值是根节点的,能正常显示文字,如果是子节点,数据没有加载,就只能显示代码,显示不出文字来,我的想法是通过代码值获取父节点,然后打开父节点,子节点就加载了,这样就能显示文字值,但是研究了半天EasyUI,感觉很奇葩,获取到下拉框的树了,通过tree的find方法获取已经加载了的数据都获取不到。我猜想EasyUI加载数据的时候直接操作的DOM对象,生成了HTML放到页面里了,但是Jquery对象里的值并没有设置。具体也只是猜想,来这里求助大神们,看看有没有好的解决方法。

加载中
0
R
ROBOT_____

这个问题感觉应该会经常遇到啊,为什么网上就你一个人在问,也没有相关的解决方案。

我昨晚遇到这个问题,经过几个小时的探索,找到方案如下:

远程加载的时候combotree是延迟加载的,第一次加载只加载根节点,点击某个根节点时才加载该根节点的子节点,每次加载一层节点,所以当我们想通过setValue方法设置默认值的时候它还没加载好,显示的就是一串数字。所以思路是在设置值之前要保证它已经加载了该数据,加载某个节点的代码如下:

var node=$('#xxtree').combotree('tree').tree('find',id);  //id是节点的id
$('#xxtree').combotree('tree').tree('expand',node.target); //expand方法是关键


然后如果设置的是某个子节点,则需要对给定的id做解析,循环expand直到加载完给定id的那一层数据,例如广东广州天河的代码440803,每两位代表一个地区,44是广东省,4408是广州市,440803是天河区,如果想设置tree的值是广东广州天河,那代码如下

var node;
for(var i=1;i<=id.length/2;i++){    
    node=$('#city').combotree('tree').tree('find',id.substr(0,2*i));
    $('#city').combotree('tree').tree('expand',node.target);
}
$('#city').combotree('setValue',id);//数据加载完毕可以设置值了

就是这样了,另外如果数据量小的话也可以后台一次性返回所有数据。我也是刚用easyui不久,有什么错误请指正,谢谢



scq503
scq503
用了你的方法循环实现逐层加载数据,但是展开父节点find子节点的时候就获取不到node了,估计是数据还没有加载完就调用find方法了,你没有遇到这个问题吗?
返回顶部
顶部