我将使用带有来自JSON文件的远程数据源的kendo UI树。我在树页面上放置了一个按钮,该按钮获取树的当前数据,将其通过POST发送到服务器,并且服务器将当前数据保存到JSON文件中,以便下次重新加载页面时,我所做的更改将被保留。这正是我想要发生的事情。
因此,我知道树的当前数据位于:
这意味着数据实时更改,例如当有人拖动树的节点时。我的问题是,当我在树内拖放节点时,数据似乎没有变化,只有当我将节点拖放到根级别时才会发生变化,即使这样也不正确,因为节点应该被移动到那里,但实际上节点被复制了,原来的节点仍然留在树中...例如,我有这棵树:如果我进行拖放更改,如下所示:如果我发送数据,保存并重新加载,则根本不会进行更改!即使在发送、保存和服务器方面都没有问题,但即使我通过拖放进行了视觉上的更改,查看更改之后的当前数据时,我也看不到任何数据的更改。另一方面,如果我进行以下更改:我可以看到当前数据中移动的节点确实被添加到数据的末尾,但它没有从其初始位置中删除!因此,如果我将当前数据发送到服务器,保存并刷新,我得到的结果是:查看和发送数据的代码如下:
因此,我知道树的当前数据位于:
$("#treeview").data("kendoTreeView").dataSource.data()
这意味着数据实时更改,例如当有人拖动树的节点时。我的问题是,当我在树内拖放节点时,数据似乎没有变化,只有当我将节点拖放到根级别时才会发生变化,即使这样也不正确,因为节点应该被移动到那里,但实际上节点被复制了,原来的节点仍然留在树中...例如,我有这棵树:如果我进行拖放更改,如下所示:如果我发送数据,保存并重新加载,则根本不会进行更改!即使在发送、保存和服务器方面都没有问题,但即使我通过拖放进行了视觉上的更改,查看更改之后的当前数据时,我也看不到任何数据的更改。另一方面,如果我进行以下更改:我可以看到当前数据中移动的节点确实被添加到数据的末尾,但它没有从其初始位置中删除!因此,如果我将当前数据发送到服务器,保存并刷新,我得到的结果是:查看和发送数据的代码如下:
function sendData() {
var req = createRequest();
var putUrl = "rest/hello/treeData";
req.open("post", putUrl, true);
req.setRequestHeader("Content-type","application/json");
var dsdata = $("#treeview").data("kendoTreeView").dataSource.data();
alert(JSON.stringify(dsdata));
req.send(JSON.stringify(dsdata));
req.onreadystatechange = function() {
if (req.readyState != 4) {
return;
}
if (req.status != 200) {
alert("Error: " + req.status);
return;
}
alert("Sent Data Status: " + req.responseText);
}
}
这是一个 Bug 吗?还是我做错了什么?有人能在每次拖放时正确看到当前数据的变化吗?
tree.expand(".k-item");
但由于某种原因(bug?),它并不总是起作用。我找到了两个解决方法:1. 在您的json中定义一个“expanded”字段,并将其设置为“true”。2. 执行tree.expand('.k-item')
两次!! - OnaBaiitems
字段,那么箭头也不会出现!问题在于,当我拖放一个节点时,如果节点根本没有item
字段,那么kendo在将节点写入新位置时会自动添加"items":[]
到该节点上! - CipherDarkness