如何在完整的jstree重载事件上绑定回调函数?

时间:2011-06-23 09:31:00

标签: javascript jquery jstree

我有一个按钮,可以重新加载(重新发送一个AJAX请求),点击一次jsTree。

以下是我的示例配置代码:

treeContainer.bind("loaded.jstree", function () {
    alert("the tree is loaded");
}).jstree(config);

我遇到的问题是,在第二次,第三次等次点击“重新加载”按钮后,我没有显示警告(包含在回调函数中)。 我使用了错误的jstree状态事件吗?

总而言之,我希望每次单击“重新加载”按钮时都会执行一个jsTree回调函数。

我目前正在使用 jsTree 1.0-rc1(rev.191)

4 个答案:

答案 0 :(得分:5)

在构建新树之前销毁树也可以。

treeContainer.jstree("destroy");
treeContainer.bind("loaded.jstree", function () {
    alert("the tree is loaded");
}).jstree(config);

答案 1 :(得分:1)

将此添加到核心:

        reopen : function () {
            var _this = this;
            if(this.data.core.to_open.length) {
                $.each(this.data.core.to_open, function (i, val) {
                    _this.open_node(val, false, true); 
                });
            }
            this.__callback({});
            this.reopened();
        },

请注意,只有this.reopened会添加到allready existing reopen-method中。现在创建重新打开的方法:

        reopened : function () {
            this.__callback();
        },

现在将新重新打开的方法绑定到树选择器

}).bind("reopened.jstree", function (e,data) {
        alert("i am refreshed...");
    });

要小心,因为在加载树时也会调用此警报消息。 它无论如何更好,因为你现在有一种方法可以在刷新树时进行回调!

希望这能帮到你们所有人!

答案 2 :(得分:0)

我知道这是一个老问题,但是我遇到了与jsTree 3.3.4相同的问题。可行的解决方案是:

treeContainer.bind("refresh.jstree", function (event, data) {
    alert("the tree has been refreshed");
    $(this).jstree("open_all");  //Example: open all nodes after refreshing
})    

答案 3 :(得分:-1)

来自jstree documentation

  

.loaded()

     

虚拟函数,其目的是   仅触发加载的事件。这个   事件在触发后触发一次   树的根节点已加载,但是   在initial_open中设置任何节点之前   打开了。

因此,您可以从ajax调用的成功回调中调用此方法。像这样:

$.ajax({
  url: "yourscript-url",
  success: function(){
    $('selector-for-jstree-container').jstree('loaded');
  }
});

另请参阅同一jstree文档页面上的“ 与树交互 ”部分。