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

来源:互联网 发布:淘宝买家一颗心 编辑:程序博客网 时间:2024/06/16 08:25

首先说明一下,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"); //展开节点不变}



0 0
原创粉丝点击