我有一个按钮,可以重新加载(重新发送一个AJAX请求),点击一次jsTree。
以下是我的示例配置代码:
treeContainer.bind("loaded.jstree", function () {
alert("the tree is loaded");
}).jstree(config);
我遇到的问题是,在第二次,第三次等次点击“重新加载”按钮后,我没有显示警告(包含在回调函数中)。 我使用了错误的jstree状态事件吗?
总而言之,我希望每次单击“重新加载”按钮时都会执行一个jsTree回调函数。
我目前正在使用 jsTree 1.0-rc1(rev.191)。
答案 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)
.loaded()
虚拟函数,其目的是 仅触发加载的事件。这个 事件在触发后触发一次 树的根节点已加载,但是 在initial_open中设置任何节点之前 打开了。
因此,您可以从ajax调用的成功回调中调用此方法。像这样:
$.ajax({
url: "yourscript-url",
success: function(){
$('selector-for-jstree-container').jstree('loaded');
}
});
另请参阅同一jstree文档页面上的“ 与树交互 ”部分。