2

我在 JQuery JsTree 插件中为子节点使用 ajax 加载。如果我在 Web 浏览器中重新打开加载的节点,我需要刷新所有子节点。

4

3 回答 3

4

您可以使用类似这样的方法,在关闭时将新类添加到节点,导致节点在打开时刷新。如果班级在场。因此,您可以删除 on close_node 部分并为需要在打开时刷新的节点添加您自己的类名

$(function () {
    var tree_id="#jstree"
    var ajax_again="to-be-refreshed";

    $(tree_id).bind("open_node.jstree close_node.jstree", function (e,data) {
        var currentNode = data.args[0];
        if(e.type === "close_node") {
            currentNode.addClass(ajax_again);
        }   
        if(e.type === "open_node") {
            if (currentNode.hasClass(ajax_again)) { 
                var tree = $.jstree._reference(tree_id);
                tree.refresh(currentNode);
            }  
        }
    })  .jstree({

或者您可以在所有节点都在打开时刷新时使用简化版本

$(function () {
    var tree_id="#jstree"

    $(tree_id).bind("open_node.jstree close_node.jstree", function (e,data) {
        var currentNode = data.args[0];
        if(e.type === "open_node") {
            var tree = $.jstree._reference(tree_id);
            tree.refresh(currentNode);
        }
    })  .jstree({
于 2012-06-21T01:21:19.653 回答
2

我找不到执行此操作的 jstree API,因此我查看了源代码。

如果您使用children: true,它将在第一次打开时使用点击加载。它会检查node.state.loaded是否第一次加载它。

所以这个事件处理程序对我很有效:

        .on('after_close.jstree', function (event, data) {
            // Flag it to be reloaded on reopen:
            data.node.state.loaded = false;
        });

after_close.jstree事件在关闭动画完成时发生。

谢谢!

于 2017-02-21T07:48:07.377 回答
2

以上代码都不适合我。下面是我的代码,它可以工作:

$('.tree-container').on('close_node.jstree', function (event, data) {
    var tree = $.jstree.reference('.tree-container');
    tree.refresh(data.node);
});
于 2018-07-14T09:56:38.210 回答