我在 JQuery JsTree 插件中为子节点使用 ajax 加载。如果我在 Web 浏览器中重新打开加载的节点,我需要刷新所有子节点。
问问题
8352 次
3 回答
4
您可以使用类似这样的方法,在关闭时将新类添加到节点,导致节点在打开时刷新。如果班级在场。因此,您可以删除 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({
于 2012-06-21T01:21:19.653 回答
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
事件在关闭动画完成时发生。
谢谢!
于 2017-02-21T07:48:07.377 回答
2
以上代码都不适合我。下面是我的代码,它可以工作:
$('.tree-container').on('close_node.jstree', function (event, data) {
var tree = $.jstree.reference('.tree-container');
tree.refresh(data.node);
});
于 2018-07-14T09:56:38.210 回答