KenDoTreeview刷新后展开的节点和选中的节点不变(KenDoTreeview中的数据通过KenDoGrid来进行保存、删除)

首先说明一下,KenDoTreeview只负责显示树,新增、修改、保存、删除数据均在KenDoGrid中进行,(如果是在KenDoTreeview中进行新增、修改、保存、删除操作的话,不需要这么复杂,KenDoTreeview本身就会保持展开选中节点不变),每次对KenDoGrid中的数据进行操作后要对KenDoTreeview进行更新数据,本身是不会保持刷新前的节点展开选中的状态,一般情况下都会要求树的展开选中状态不变。


js部分:先定义一个变量数组A,KenDoTreeview展开节点时触发expand事件,获得该节点的id(是唯一性标识即可)追加到数组A中;KenDoTreeview关闭节点时触发collapse事件,获得该节点的id(是唯一性标识即可)并在数组A中删除这个id。把该数组A传入后台。

Java部分:接收js传过来的数组A。查询好数据,通过for循环判断数组A中是否包含第i条数据中的id,如果是则设置expanded字段为true。刷新后展开的节点不变。

选中节点不变,可以只在js部分实现。首先定义一个变量b,KenDoTreeview在每次选中节点时触发select事件,获取该节点的id。刷新KenDoTreeview后,在transport的read()中,通过id获取该条数据的uid,根据uid选中该节点。


下面只显示部分代码

js部分:

<div id="treeview"></div>
<script>
var nodeValues,parantOrgId;
function initTreeView () {	
	$("#treeView").kendoTreeView({
		template: "#=item.name# #=item.code#<input type='hidden' value='#=item.id#'/><input type='hidden' value='#=item.name#'/><input type='hidden' value='#=item.isManageGroup#'/>",
		dataSource: treeList,
		select: function (e) {
			parantOrgId = $(e.node).find("input:eq(0)").val();
			$("#gridOrg").data("kendoGrid").dataSource.read();
		expand: function(e){
			nodeValues.push($(e.node).find("input:eq(0)").val());
		},
		collapse: function(e){
			var value = $(e.node).find("input:eq(0)").val();
			var index = nodeValues.indexOf(value);
			nodeValues.splice(index,1);
		}
	});
}
var treeList = new kendo.data.HierarchicalDataSource({
	transport: {
		read: function (options) {
			var info = new EiInfo();
			info.set("nodeValues",nodeValues);
		        (此处省略,这里是要跳转到后台Java中的).send("PublicOrganization", "queryTree", info, {
				onSuccess: function (info) {
					if (info.get("errorcode" === "-1")) {
						return;
					}
					var data = eval(info.get("treeJson"));
					options.success({data: data});
					if(parantOrgId!=-1){
						var treeview = $("#treeList").data("kendoTreeView");
						var barDataItem = treeview.dataSource.get(parantOrgId);
						if(barDataItem!=undefined){
							treeview.select(treeview.findByUid(barDataItem.uid));//选中节点不变
						}
					}
				},
				onFail: function (msg) {
					options.error(msg);
				}
			});
		},
	},
	schema: {
		data: function(d){
			return d.data;
		},
        model: {
            id: "id",
            children: "items"
        }
    }
});
</script>



Java部分代码:

String nodeValues = info.getString("nodeValues");//获取数组
if(nodeValues.indexOf(((Map)ds.get(i)).get("id").toString()) != -1){
((Map)ds.get(i)).put("expanded", "true"); //展开节点不变
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值