EasyUI的combotree设置值问题

发布于 2021-11-23 13:45:42 字数 571 浏览 840 评论 2

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

问题在下面

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

像你 2021-11-28 06:27:36

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

悲喜皆因你 2021-11-23 23:09:01

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

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

远程加载的时候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不久,有什么错误请指正,谢谢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文