如何在JsTree中重新打开节点上刷新子节点?

时间:2012-06-14 09:46:29

标签: jquery jstree

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

3 个答案:

答案 0 :(得分:3)

您可以使用类似的内容将close类添加到导致节点在打开时刷新的节点上。如果班级存在。因此,您可以删除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({

答案 1 :(得分: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事件。

谢谢!

答案 2 :(得分:0)

以上代码均不适用于我。以下是我的有效代码:

$('.tree-container').on('close_node.jstree', function (event, data) {
    var tree = $.jstree.reference('.tree-container');
    tree.refresh(data.node);
});