您的位置:首页 > 其它

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

2017-02-13 10:54 537 查看
首先说明一下,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"); //展开节点不变
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐