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);
	}
},

posted on 2021-12-31 14:39  northwest  阅读(376)  评论(0编辑  收藏  举报

导航