关于addNodes的小问题

发布于 2021-12-02 02:23:12 字数 1828 浏览 796 评论 2

@zTree 你好,想跟你请教个问题:

我在使用ztree时,由于只修改前端,后端请求等不能修改,所以异步加载节点时,不是使用url的方式,自己通过beforeExpand将数据请求过来,再转换成ztree的节点实现的,今天突然发现了一个问题,就是点击+号展开树节点时,然后树节点展开后又自动关闭了,反复测试调了几个小时,最后确定了是addNodes方法的问题,感觉是由于数据返回过快而造成的,通过延时执行可以解决。附上测试代码:

// 树节点展开前触发事件
	function beforeExpand(treeId, treeNode, treeBase) {
		if (treeNode.hasAsynced) {
			return true;
		}
		if (!treeNode.isAsyncing) {
			ajaxGetNodes(treeId, treeNode, "refresh", treeBase);
			return true;
		} else {
			windowUtil.tip("正在获取数据中,请稍后展开节点。");
			return false;
		}
	}

// 异步加载子节点
	function ajaxGetNodes(treeId, treeNode, reloadType, treeBase) {
		var zTree = $.fn.zTree.getZTreeObj(treeId);
		if (reloadType == "refresh") {
			treeNode.icon = baseUrl
					+ "/visual/js/lib/zTree_v3/css/zTreeStyle/img/loading.gif";
			zTree.updateNode(treeNode);
		}
		treeNode.isAsyncing = true;
		treeBase.asyncGetChildren(treeNode, function(nodes) {
			treeNode.hasAsynced = true;
			delete treeNode.isAsyncing;
			treeNode.icon = "";
			zTree.updateNode(treeNode);
			zTree.addNodes(treeNode, nodes);
			return;
// 通过延时可解决问题
			setTimeout(function() {
				zTree.addNodes(treeNode, nodes);
			}, 10);

		}, function() {
			windowUtil.tip("异步获取数据出现异常。");
			delete treeNode.hasAsynced;
			delete treeNode.isAsyncing;
			treeNode.icon = "";
			zTree.updateNode(treeNode);
		});
	}

// 异步获取指令父节点的子节点对象
	// @param parentNode 父节点
	// @param successCallback 获取成功回调函数
	// @param failedCallback 获取失败回调函数
	treeBase.prototype.asyncGetChildren = function(parentNode, successCallback,
			failedCallback) {
// 直接返回数据,用于测试
		successCallback([{id: "1", text: "test", pId: parentNode.id}]);
};



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

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

发布评论

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

评论(2

北笙凉宸 2021-12-02 08:16:44

没用。不过我用另一种方式解决了,zTree.addNodes(treeNode, nodes, true);给最后一个参数设置true就可以了。感谢你的回答。

羁拥 2021-12-02 07:44:01

beforeExpand 中 触发你的 异步加载时, 就不要return true了,直接return false 试试看

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