21

昨天开始使用 jQuery 和 jsTree 插件,并让它通过对 servlet 的 AJAX 调用成功加载树。现在,我想让树在加载后打开所有节点,所以我在 ajax 属性中添加了一个成功函数。但是,我似乎无法让 open_all() 方法正常工作。我对使用 jQuery 很陌生,所以我猜这很简单,我做错了。

Firebug 没有显示任何排除错误输入方法名称的愚蠢错误的错误。我检查了文档,我认为我根据我阅读的内容正确地做所有事情。树正在正确加载,但在页面加载后没有打开所有节点。

我在 Firefox 3.6.8 上使用 jQuery 1.4.2 和 jsTree 1.0rc2。

这是我用来加载树并尝试打开树中所有节点的代码:

// Create the tree object
$("td#modelXML").jstree({
    core : { "animation" : 0 },
    //xml_data : {"data" : "" + xml, "xsl" : "nest"},
    xml_data : {"ajax" : 
                    {"url" : "servlet/GetModelHierarchy", 
                    "type" : "post", "data" : { modelId : "" + modelId} }, 
                    "xsl" : "nest",
                    "success" : function(){
                                $(this).open_all(-1);
                                }
    },
    themes : {"theme" : "classic", "dots" : true, "icons" : true},
    types : { 
        "types" : {
            "category" : {
                "valid_children" : ["factor"]
            },
            "factor" : {
                "valid_children" : ["level"]
            },
            "level" : {
                "valid_children" : "none",
                "icon" : {
                    "image" : "${request.contextPath}/jsTree/file.png"
                }
            }
        }
    },
    plugins : ["themes", "types", "xml_data"]
});
4

4 回答 4

40

您必须挂钩事件,然后调用open_all.

要在加载时打开所有节点,请使用:

    var tree = $("#id-or-selector-for-my-tree-element");
    tree.bind("loaded.jstree", function (event, data) {
        tree.jstree("open_all");
    });

在使用 初始化树之前,请执行上述操作.jstree({...})

如果刷新它,那么要再次打开所有节点,您必须使用:

    tree.bind("refresh.jstree", function (event, data) {
        tree.jstree("open_all");
    });
于 2010-09-10T03:58:08.773 回答
20

是的,这是一个老问题,但没有公认的答案,唯一的答案对我没有用,这是我现在使用的答案:

var tree = $("td#modelXML")
    .bind("loaded.jstree", function (e, data) {
        data.inst.open_all(-1); // -1 opens all nodes in the container
    })
    .jstree({ /* your jsTree options as normal */ });

这里的关键点data.inst是您的jsTree, 并且是您唯一可用的参考,因为在完成tree之前没有价值.jstree({。由于loaded.jstree在调用中被.jstree({调用,结果将尚不存在。看?

于 2010-11-03T11:03:09.343 回答
3

我完全无法让它工作,tree.jstree('open_all')或者data.inst.open_all(-1)- 最后我不得不使用data.instance.open_all()- 注意从 inst 到 instance 的变化,以及 open_all(-1) 到 open_all() - 这两个似乎都是 jQuery 所必需的1.11 和 jstree 3.0.0。我的最终代码块如下所示:

$(document).ready(function() {
    var tree = $('#jstree');
    tree.bind('loaded.jstree', function(event, data) {
        data.instance.open_all();   
    });
    tree.jstree({});
});
于 2014-03-04T15:47:08.783 回答
1

尝试这个!

$("td#modelXML").jstree("open_all","#nodeID");
于 2010-12-24T10:14:06.690 回答