我在JQuery JsTree插件中为子节点使用ajax加载。如果我在网络浏览器中重新打开加载的节点,我需要刷新所有子节点。
答案 0 :(得分:3)
您可以使用类似的内容将close类添加到导致节点在打开时刷新的节点上。如果班级存在。因此,您可以删除on close_node部分并为需要在打开时刷新的节点添加自己的类名
$(function () {
var tree_id="#jstree"
var ajax_again="to-be-refreshed";
$(tree_id).bind("open_node.jstree close_node.jstree", function (e,data) {
var currentNode = data.args[0];
if(e.type === "close_node") {
currentNode.addClass(ajax_again);
}
if(e.type === "open_node") {
if (currentNode.hasClass(ajax_again)) {
var tree = $.jstree._reference(tree_id);
tree.refresh(currentNode);
}
}
}) .jstree({
或者当所有节点在打开时刷新
时,您可以使用简化版本$(function () {
var tree_id="#jstree"
$(tree_id).bind("open_node.jstree close_node.jstree", function (e,data) {
var currentNode = data.args[0];
if(e.type === "open_node") {
var tree = $.jstree._reference(tree_id);
tree.refresh(currentNode);
}
}) .jstree({
答案 1 :(得分:2)
我找不到一个jstree API来执行此操作,因此我查看了源代码。
如果您使用children: true
,它将在首次打开时使用点击加载。它会检查node.state.loaded
以确定是否第一次加载它。
所以这个事件处理程序对我来说效果很好:
.on('after_close.jstree', function (event, data) {
// Flag it to be reloaded on reopen:
data.node.state.loaded = false;
});
关闭动画完成时会发生after_close.jstree
事件。
谢谢!
答案 2 :(得分:0)
以上代码均不适用于我。以下是我的有效代码:
$('.tree-container').on('close_node.jstree', function (event, data) {
var tree = $.jstree.reference('.tree-container');
tree.refresh(data.node);
});