首页 > 解决方案 > jsTree:AJAX 调用后刷新内容然后打开所有

问题描述

我已经加载了一个带有 AJAX 调用的 jsTree,它返回 JSON 数据。当一个节点被移动并且我想要刷新树时,会进行另一个 AJAX 调用:

$("#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");
});

如何刷新和打开树?谢谢你的帮助。

[编辑] Tomalak 回答后的精确度:

移动完成后,数据库端会发生一些过程,新内容必须通过 AJAX 加载然后显示。这就是树被刷新的原因。

标签: jqueryjstree

解决方案


添加它会在刷新后重新打开树:

.bind("refresh.jstree", function (event, data) {
  $(this).jstree("open_all");
}

推荐阅读