easyui:combotree懒加载带来的便利和坑
easyui的combotree是懒加载的,传入一个赋值的url。
combotree首先会加载一级节点,点击一级节点,再去请求二级节点的数据,展开。
对于数据量很大、要求加载速度的情况,这是棵灵活的好树。
但它也有不那么好用的情况:
如果需要选择节点,无论根节点、叶节点,所有节点前面都加一个checkbox,所有节点都可以被选择。
用户选择以后,需要拿到用户选择的值。
问题就在这里,假如根节点是[全部],用户没有展开[全部]下面的节点,而是直接勾选了[全部]前面的checkbox。
这时候,combotree整棵树都只有[全部]这一个节点,无论用.combotree("getValues")还是遍历,都只能拿到[全部]这一个值,而拿不到它下面的所有节点,因为这棵树还没有完全展开,只能拿到它目前已经展开的节点。
解决这个问题的办法:一次性把树加载完。
详细代码:
在combotree的onLoadSuccess()方法里把整棵树的所有节点展开:
onLoadSuccess: function(node, data) {
for (var i = 0; i < data.length; i++) { //展开
var id = data[i].id;
var node = $("#tree").combotree('tree').tree('find', id);
$("#tree").combotree('tree').tree('expand', node.target);
}
},