问题描述
|
我有一个按钮,可在单击jsTree时重新加载(重新发送AJAX请求)。
这是我的示例配置代码:
treeContainer.bind(\"loaded.jstree\",function () {
alert(\"the tree is loaded\");
}).jstree(config);
我遇到的问题是,在第二次,第三次等单击“重新加载”按钮后,没有显示警报(包装在回调函数中)。
我使用了错误的jstree状态事件吗?
总而言之,我希望每次单击“重新加载”按钮时都执行jsTree回调函数。
我目前正在使用jsTree 1.0-rc1(rev.191)。
解决方法
在构建新树之前将其破坏也可以。
treeContainer.jstree(\"destroy\");
treeContainer.bind(\"loaded.jstree\",function () {
alert(\"the tree is loaded\");
}).jstree(config);
, 将此添加到核心:
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被添加到所有已经存在的现有reopen方法中。现在创建重新打开的方法:
reopened : function () {
this.__callback();
},
现在将新的重新打开的方法绑定到您的树选择器
}).bind(\"reopened.jstree\",function (e,data) {
alert(\"i am refreshed...\");
});
请小心,因为在树加载完成后也会调用此警报消息。
无论如何,它会更好,因为刷新树后您现在有了一种回调方法!
希望这对大家有帮助!
, 从jstree文档中:
.loaded()
一个虚拟函数,其目的是
仅触发已加载的事件。这个
事件触发一次
树的根节点已加载,但是
在initial_open中设置的任何节点之前
被打开。
因此,您可以从ajax调用的成功回调中调用此方法。像这样:
$.ajax({
url: \"yourscript-url\",success: function(){
$(\'selector-for-jstree-container\').jstree(\'loaded\');
}
});
另请参见同一jstree文档页面上的“与树交互”部分。