Jquery jsTree:在AJAX调用后刷新内容,然后打开所有
我已经用返回JSON数据的AJAX调用加载了一个jsTree。当移动节点并且我希望刷新树时,会进行另一个AJAX调用:Jquery jsTree:在AJAX调用后刷新内容,然后打开所有,jquery,jstree,Jquery,Jstree,我已经用返回JSON数据的AJAX调用加载了一个jsTree。当移动节点并且我希望刷新树时,会进行另一个AJAX调用: $("#my_tree").jstree({ "core": { ... }) .on("move_node.jstree", function(node,nodes){ $.ajax({ url: "/path/to/ajax", type: "POST", data: { action: "mov
$("#my_tree").jstree({
"core": {
...
})
.on("move_node.jstree", function(node,nodes){
$.ajax({
url: "/path/to/ajax",
type: "POST",
data: {
action: "move",
...
},
success: function () {
$('#my_div').jstree(true).refresh(false, true);
}
});
})
这是可行的,但我希望刷新时打开树。这不起作用,树仍然倒塌
success: function () {
$('#my_tree').jstree(true).refresh(false, true);
$('#my_tree').jstree("open_all");
[or even $("#my_tree").trigger("loaded.jstree"); ]
}
但是,当页面加载以下内容时,“open_all”可以正常工作:
.bind("loaded.jstree", function (event, data) {
$(this).jstree("open_all");
});
如何刷新并打开树?谢谢你的帮助
[编辑]托马拉克回答后的精度:
移动完成后,数据库端会发生一些进程,必须通过AJAX加载新内容,然后再显示。这就是刷新树的原因。添加此选项将在刷新后重新打开树:
.bind("refresh.jstree", function (event, data) {
$(this).jstree("open_all");
}
最初,在客户端加载树。移动一个节点。这意味着,客户端已经处于预期状态(节点位于新位置)。您可以通过Ajax将移动告知服务器。Ajax调用成功(服务器已保存移动)。结果,您根本不需要刷新树-它已经完全是它应该的样子了。(但是当Ajax调用失败时,您需要将节点移回并通知用户错误。)@Tomalak如果我不这样做,我不会问如何做…;-)移动完成后,数据库端会发生一些进程,必须通过AJAX加载新内容,然后再显示。再一次,它工作正常,我只是想在刷新后打开树。但是你已经这样做了。。。至少是第一部分。在Ajax成功时,什么也不做。这里有一个关于“关于Ajax错误”部分的线程:我的观点是,在不破坏树状态的情况下,不必恢复树状态(什么是打开的、选中的或其他任何部分)。刷新树会破坏树状态。如果你能避免这种情况,你会过得更好。