`

Z-tree实例(三)——callback与重新加载、追加

 
阅读更多

官网上的“用 zTree 方法异步加载节点数据”例子不好使,我就自己研究了一下,这里做个记录。

1、页面布局(需要引入的JS文件,css文件就省了):

<body>
<div class="content_wrap">
	<div class="zTreeDemoBackground left">
		<ul id="treeDemo" class="ztree"></ul>
	</div>
	<a href="javascript:void(0);" id="refreshNOde">重新加载</a>&nbsp;&nbsp;&nbsp;&nbsp;
	<a href="javascript:void(0);" id="refreshNodeSilent">悄悄地重新加载</a>
	<br />
	<br />
	
	<a href="javascript:void(0);" id="addNode">追加</a>&nbsp;&nbsp;&nbsp;&nbsp;
	<a href="javascript:void(0);" id="addNodeSilent">悄悄地追加</a>
</div>
</body>

 2、JS:

<script type="text/javascript">
var setting = {
		async: {
		enable: true,
		url:"area!async.action",
		type:"post",
		autoParam:["id=id"],
		//otherParam:{"otherParam":""},
		contentType:"application/x-www-form-urlencoded",
		dataType:"text",
		dataFilter: filter
	},
	view: {
		selectedMulti: true//允许同时选中多个节点
	},
	data: {
		simpleData: {
			enable: true,//开启简单模式
			idKey:"id",
			pIdKey:"pId",
			rootPId:0
		}
	},
 	callback:{
 		//beforeClick:用于捕获单击节点之前的事件回调函数,并且根据返回值确定是否允许单击操作,默认值为null
 		beforeClick: beforeClick,
 		//beforeAsync:用于捕获异步加载之前的事件回调函数,zTree 根据返回值确定是否允许进行异步加载,默认值为null
 		beforeAsync:beforeAsync,
 		//用于捕获异步加载出现异常错误的事件回调函数
 		onAsyncError:onAsyncError,
 		//用于捕获异步加载正常结束的事件回调函数
 		onAsyncSuccess:onAsyncSuccess
 		//用于捕获节点被点击的事件回调函数
 		//onClick:onclick//(注意大小写,若onClick写成了onclick那么点击时将没有任何反应)
 	}
};

/**
*@param treeId:对应zTree的treeId,便于用户操控
*@param parentNode:进行异步加载的父节点 JSON 数据对象
*@param childNodes:异步加载获取到的数据转换后的 Array(JSON) / JSON / String 数据对象
*/
function filter(treeId, parentNode, childNodes) {
	if (!childNodes) return null;
	for (var i=0, l=childNodes.length; i<l; i++) {
		childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
	}
	return childNodes;
}

/**
*点击节点时判断当前节点是否为根节点,若不是根节点,弹出提示并退出
*@param treeId:对应zTree的 treeId
*@param treeNode:被单击的节点 JSON 数据对象
*@param clickFlag:节点被点击后的选中操作类型
*@return 返回值是 true/false如果返回 false,zTree 将不会选中节点,也无法触发 onClick 事件回调函数
**/
function beforeClick(treeId,treeNode,clickFlag){
	//若不是父级节点(isParent与treeNodes中的设置无关,只要当前节点有子级即便不设置isParent=true,treeNode.isParent也会是true)
	if(!treeNode.isParent){
		alert("当前是子节点,不能操作!")
		return false;
	}
	return true;
}

/**
*点击节点进行加载时判断是否为根节点,若不是根节点,则不进行加载
*@param treeId:对应zTree的treeId
*@param treeNode:进行异步加载的父节点 JSON 数据对象针对根进行异步加载时,treeNode = null
*@return true/false,如果返回 false,zTree将不进行异步加载,也无法触发 onAsyncSuccess/onAsyncError 事件回调函数
*/
function beforeAsync(treeId,treeNode){
	if(!treeNode.isParent){//不是父节点
		alert("当前节点不是父节点,无需加载!");
		return false;
	}else{
		alert("当前节点是父节点,可以加载!");
		return true;
	}
}

/**
*当异步加载出现问题时,调用该方法alert出异常信息
*@param event:标准的JS event对象
*@param treeId:对应zTree的treeId
*@param treeNode:进行异步加载的父节点 JSON 数据对象针对根进行异步加载时,treeNode = null
*@param XMLHttpRequest:标准的XMLHttpRequest对象
*@param status:请求状态:success,error
*@param errorThrown:只有当异常发生时才会被传递
**/
function onAsyncError(event,treeId,treeNode,XMLHttpRequest,status,errorThrown){
	alert("加载失败,失败原因:"+XMLHttpRequest);
}

/**
*异步加载正常结束时调用该方法
*@param event:标准的JS event对象
*@param treeId:对应zTree的treeId
*@param treeNode:进行异步加载的父节点 JSON 数据对象针对根进行异步加载时,treeNode = null
*@pram msg:异步获取的节点数据字符串,主要便于用户调试使用。实际数据类型会受 setting.async.dataType 的设置影响
*/
function onAsyncSuccess(event,treeId,treeNode,msg){
	alert(msg);
}

/**
*点击节点时调用该方法
*@param event:标准的JS Event对象
*@param treeId:对应zTree的 treeId
*@param treeNode:被单击的节点 JSON 数据对象
*@param clickFlag:节点被点击后的选中操作类型
**/
function onclick(event,treeId,treeNode,clickFlag){
	alert("id:"+treeNode.id+" name:"+treeNode.name+" clickFlag:"+clickFlag);
}

/**
*刷新节点
*@param event:标准的JS Event对象
*/
function refreshNode(event){
	var zTree = $.fn.zTree.getZTreeObj("treeDemo");//获取tree对象
	var type = event.data.type;//类型
	var silent = event.data.silent;
	var nodes = zTree.getSelectedNodes();//获取选中的节点对象
	if(nodes.length==0){//说明没有选中节点
		alert("请选择一个父节点!");
		return false;
	}
	//逐个处理选中节点
	for(var i=0;i<nodes.length;i++){
		zTree.reAsyncChildNodes(nodes[i], type, silent);//异步加载选定节点的子节点
		if (!silent){//
			//选中指定节点:
			//treeeNode表示需要被选中的节点 
			//addFlag=true,表示追加选中,会出现多点同时被选中的情况
			//addFlag = false 表示单独选中,原先被选中的节点会被取消选中状态
			zTree.selectNode(nodes[i],true);
		}
	}
}

/**
*强行异步加载父节点的子节点,已经加载过的父节点可反复使用此方法重新加载,需要通过ztree对象使用该方法
*@param parentNode:指定需要异步加载的父节点 JSON数据
(1、parentNode = null 时,相当于从根节点 Root 进行异步加载
  2、parentNode.isParent = false 时,不进行异步加载)
*@param reloadType:eloadType = "refresh" 表示清空后重新加载。reloadType != "refresh" 时,表示追加子节点处理。
*@param isSilent:设定异步加载后是否自动展开父节点。isSilent = true 时,不展开父节点,其他值或缺省状态都自动展开
*/
function reAsyncChildNodes(parentNode, reloadType, isSilent){
}

$(document).ready(function(){
	var treeNodes =${treeStr};
	if(treeNodes!=null && treeNodes!=''){
		$.fn.zTree.init($("#treeDemo"), setting,treeNodes);
		//绑定事件
		$("#refreshNOde").bind("click", {type:"refresh", silent:false}, refreshNode);
		$("#refreshNodeSilent").bind("click", {type:"refresh", silent:true}, refreshNode);
		$("#addNode").bind("click", {type:"add", silent:false}, refreshNode);
		$("#addNodeSilent").bind("click", {type:"add", silent:true}, refreshNode);
	}
});

</script>

 3、个人记录:

a、悄悄地重新加载跟异步加载的区别:异步加载点击父节点时会出现一个不停转动的“正在加载”的图标,悄悄加载时不会出现图标,且打开子节点就像子节点最开始就已经加载出来了似的。

b、重新加载和悄悄地重新加载:点重新加载时,自动加载选中父节点下的子节点且全部展开。悄悄地重新加载,就是自动加载选中父节点下的子节点且不展开。

c、追加与悄悄地追加:追加与悄悄地追加,效果与重新加载两个是相同的,所不同的是:点击重新加载时会自动重新加载子节点,点击追加时会先判断选定父节点下是否有子节点,若没有则自动加载子节点,若有则将加载出来的子节点追加在父节点之后,依次类推。总而言之:每点击依次追加就会从后台重新请求依次并将加载出来的子节点追加在父节点之后。

 

 

 

分享到:
评论

相关推荐

    z-tree的实例

    1. **数据绑定**:z-tree支持动态加载和异步加载数据,可以方便地与后端服务进行交互,获取或更新树节点信息。 2. **节点操作**:包括展开、折叠、选中、取消选中、添加、删除、编辑节点等操作,提供了一整套完善的...

    z-tree API文档网页版

    4. **z-tree与JavaScript交互** - `$.fn.zTree`: jQuery扩展方法,用于对`z-tree`实例的操作。 - `zTreeObj`: `z-tree`实例对象,通过该对象可以调用所有API。 5. **Demo分析** - **基本示例**: 展示了最简单的`...

    cocos2d-x实例——场景自动切换

    本实例将探讨如何在Cocos2d-x中实现场景的自动切换,并利用回调函数和动作来创建简单的动画效果。 首先,我们需要了解Cocos2d-x中的`Director`类,它是整个游戏的管理者,负责调度场景的切换。使用`Director::...

    jQuery-simple-tree

    1. 动态加载:jQuery-simple-tree支持异步加载子节点,当用户展开父节点时,可以通过`loadChildren`回调函数获取子节点数据。 ```javascript $('#treeElement').simpleTree({ loadChildren: function(node, ...

    前端开源库-request-idle-callback

    3. **懒加载**:图片、视频等资源的懒加载可以在空闲时进行,减少页面初始加载时间。 4. **DOM操作**:如果有一些DOM操作不是立即必要的,可以放在`requestIdleCallback`中,以减少页面渲染延迟。 在使用`request-...

    28-定时器.pdf——电子版pdf版

    `setTimeout()`与`setInterval()`类似,但只执行一次。它会在`delay`毫秒后调用回调。返回的Timeout对象可以用`clearTimeout()`来取消。 ### 取消定时器 `clearImmediate(immediate)`、`clearInterval(timeout)`和...

    ztree连接数据库的一些增删该查

    9. **多实例支持**:在同一页面内可生成多个独立的Tree实例。 10. **简单配置**:通过简单的参数设定,实现复杂功能。 **zTree的优势:** zTree的作者积极维护,及时回应用户问题,使得学习和使用过程更为顺畅。...

    NX二次开发UF-CLONE-remove-ntfy-callback 函数介绍

    NX二次开发UF_CLONE_remove_ntfy_callback 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...

    merkle-patricia-tree:项目正在积极开发中,已移至EthereumJS VM monorepo

    概要 这是指定的修改后的merkle patricia树的实现: 修改后的Merkle Patricia树(trie)提供了一种持久性数据...安装npm install merkle-patricia-tree 用法该库中实现了三种树变体,分别是: BaseTrie , Checkpoin

    file-tree:生成与d3的层次结构布局格式匹配的文件元数据树

    安装npm install file-tree用法require('file-tree')(files, mapper, callback) 接受一个files数组。 mapper(filename, next)应该将一个对象与您要与该文件关联的元数据传递给回调。 一切完成后callback(err, tree) ...

    实例010——使用Windows API创建程序窗口.zip

    本实例“实例010——使用Windows API创建程序窗口”旨在教授如何利用Windows API来构建一个基本的GUI(图形用户界面)程序。 首先,我们需要了解Windows API中的核心概念——窗口过程(Window Procedure)。窗口...

    Jquery z_tree 自己整理API

    z_tree的初始化主要通过`$.fn.zTree.init()`方法完成,需要传入三个参数:节点容器的选择器、配置对象和数据源。例如: ```javascript var setting = {...}; // 配置对象 var zNodes = [...]; // 数据源 $.fn.zTree...

    wechat-corp-service-callback:微信公共平台企业号版(第三方企业套件)SDK-回调接口

    wechat corp service callback微信公共平台企业号版(第三方企业套件)SDK-回调接口功能说明用来接收企业第三方应用套件发送过来的回调消息。安装方法$ npm install wechat-corp-service-callback使用方法前提首先,...

    基于Jquery的JSTree实例

    **基于Jquery的JSTree实例** JSTree是一款强大的基于JavaScript的树型视图库,它能够方便地在网页中构建和操作交互式的树结构。JSTree与jQuery库结合,提供了丰富的API和多种可配置选项,使得开发者能够轻松实现...

    terraform-tower-gcp-post-provision-callback-demo

    【标题】"terraform-tower-gcp-post-provision-callback-demo" 演示了如何在Google Cloud Platform (GCP) 上使用Terraform和Ansible Tower进行资源自动化配置,并实现资源创建后的回调功能。 在Terraform中,我们...

    html-webpack-custom-callback-plugin:使用html webpack插件时,允许自定义回调更改HTML

    ... 该插件使您可以: ...安装 您必须在节点6+上运行webpack(4.x)。... const HtmlWebpackCustomCallbackPlugin = require ( 'html-webpack-custom-callback-plugin' ) ; 在您的Webpack配置对象中,添加

    C#使用C++标准DLL实例(包含callback)

    本示例中的"**C#使用C++标准DLL实例(包含callback)**"着重讲解了如何在C#应用中调用C++编写的动态链接库(DLL),并实现回调函数的功能。这种技术对于那些需要利用C++的高效性能或已有的C++库的C#项目非常有用。 ...

    jsTree操作 jsTree插件简介

    jsTree 支持多种功能,包括动态加载、异步数据获取、节点的增删改查、搜索、拖放操作以及自定义主题和类型。 **初始化 jsTree** 在使用 jsTree 时,首先需要对元素进行初始化。以下是一个简单的初始化示例: ```...

    using-promise-then-callback-callback-misses-errors

    使用promise.then(回调,回调)会错过错误 —字节弓箭手(@bytearcher) [removed] &lt;/ script&gt; 运行使用 nvm install v4.2.1 npm install && npm test

    Ajax三级无刷新级联实例使用CallBackObject.js 简易Ajax框架

    Ajax,即Asynchronous JavaScript and XML(异步JavaScript和XML),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这个“三级无刷新级联实例”是Ajax在Web开发中的典型应用,它允许用户在选择...

Global site tag (gtag.js) - Google Analytics