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

6

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

这是我拥有的示例配置代码:

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

我遇到的问题是,当第2次、第3次等点击“reload”按钮时,没有弹出警报(包含在回调函数中)。

我是否使用了错误的jstree状态事件?

总之,我希望每次单击“reload”按钮时都执行一个jsTree回调函数。

我目前正在使用jsTree 1.0-rc1(修订版191)

4个回答

5
在构建新树之前摧毁旧树同样有效。
treeContainer.jstree("destroy");
treeContainer.bind("loaded.jstree", function () {
    alert("the tree is loaded");
}).jstree(config);

谢谢。这种方法的简单性以及它是我唯一能够让它工作的方法,让我非常高兴。 - dgo

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 添加到已有的重新打开方法中。现在创建 reopened 方法:
        reopened : function () {
            this.__callback();
        },

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

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

请注意,因为当树加载完成时,此警报消息也将被调用。

不过这样做更好,因为现在您有了一种在树刷新时进行回调的方法!

希望这能帮到大家!


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
})    

-1

来自jstree文档

.loaded ()

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

因此,您可以从ajax调用的成功回调中调用此方法。类似于以下内容:

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

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

这不是我想要的......我想将我的jsTree相关配置放在一个地方。我正在寻找的是这样的一个事件:treeContainer.bind("reloaded.jstree", function () {...}).jstree(...) - John Doe
@John Doe,很抱歉,我认为在jstree中没有这样的事件。你要么按照我的建议自己解决,要么扩展jstree核心并实现这个新事件。 - András Szepesházi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接