首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何判断jsTree是否已完全加载?

如何判断jsTree是否已完全加载?
EN

Stack Overflow用户
提问于 2012-07-12 20:48:32
回答 7查看 39.7K关注 0票数 23

我正在尝试编写一个在jsTree上打开特定节点的函数,但是在从ajax调用加载我的基树之前,我遇到了一个问题。我如何知道我的jstree数据是否已经加载,并等待它加载完成。下面是我正在尝试使用的函数。

function openNodes(tree, nodes) {
    for (i in nodes) {
        $('#navigation').jstree("open_node", $(nodes[i]));
    }
}

我正在使用以下命令加载我的初始树

$("#navigation").jstree({
    "json_data": {
        "ajax": {
            "url": function(node) {
                var url;
                if (node == -1) {
                    url = "@Url.Action("BaseTreeItems", "Part")";
                } else {
                    url = node.attr('ajax');
                }
                return url;
            },
            "dataType": "text json",
            "contentType": "application/json charset=utf-8",
            "data": function(n) { return { id: n.attr ? n.attr("id") : 0, ajax: n.attr ? n.attr("ajax") : 0 }; },
            "success": function() {
            }
        }
    },
    "themes": { "theme": "classic" },
    "plugins": ["themes", "json_data", "ui"]
});
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-12-18 05:20:56

我使用了setInterval和clearInterval:

var interval_id = setInterval(function(){
     // $("li#"+id).length will be zero until the node is loaded
     if($("li#"+id).length != 0){
         // "exit" the interval loop with clearInterval command
         clearInterval(interval_id)
         // since the node is loaded, now we can open it without an error
         $("#tree").jstree("open_node", $("li#"+id))
      }
}, 5);

JStree的".loaded“回调只适用于根节点;"._is_loaded”可能不会检查节点的长度,但我还没有尝试过。无论采用哪种方法,动画设置都会导致树中较深的节点在几毫秒后加载。setInterval命令创建一个计时循环,该循环在加载所需节点时退出。

票数 7
EN

Stack Overflow用户

发布于 2012-07-12 20:57:07

在对元素调用.jstree()之前,可以将回调绑定到before.jstreeloaded.jstree事件:

$(selector)
.bind('before.jstree', function(e, data) {
    // invoked before jstree starts loading
})
.bind('loaded.jstree', function(e, data) {
    // invoked after jstree has loaded
    $(this).jstree("open_node", $(nodes[i]));
})
.jstree( ... )
票数 34
EN

Stack Overflow用户

发布于 2014-11-13 04:19:10

在较新版本的jstree中,您可能需要等待所有节点完成加载,然后才能与它们交互。为此,您需要:

ready.jstree

所以:

$(selector)
    .bind('ready.jstree', function(e, data) {
        // invoked after jstree has loaded
     })
...
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11452205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档