我在我的应用程序中使用带有 Ajax 加载/延迟加载功能的 JSTree。
现在我正在尝试打开所有节点。所以在Loaded事件中我编写了open_all方法来打开所有节点。
$('#DIVTree').jstree({
'core': {
'multiple': false,
'data': {
'url': appRootDir + 'Tree/GetFilterList',
'data': function (node) {
return { 'ID': node.id};
}
}
},
'plugins': ['state'],
}).on('loaded.jstree', function (node) {
$('#DIVTree').jstree(true).open_all();
});
现在这开始打开我真正想要的所有节点。
但现在我多了一个取消按钮。
我想允许用户在按下取消按钮时停止加载节点。
我尝试了很多方法。我尝试使用“after_open”事件和“load_node”事件来实现递归。
$('#DIVTree').jstree({
'core': {
'multiple': false,
'data': {
'url': appRootDir + 'Tree/GetFilterList',
'data': function (node) {
return { 'ID': node.id };
}
}
},
'plugins': ['state'],
}).on('load_node.jstree', function (node) {
if (recrusiveStop == false) {
OpenNodes();
}
}).on('after_open.jstree', function (node) {
if (recrusiveStop == false) {
OpenNodes();
}
});
var OpenNodes = function () {
var nodeID = '';
$('#DIVTree .jstree-closed').each(function () {
if ($('#DIVTree').jstree(true).is_loaded(this.id) == false) {
nodeID = this.id;
return false;
}
});
if (nodeID != '') {
$('#DIVTree').jstree(true).open_node(nodeID);
}
}
但还是无法实现。
在“after_open”事件中仅触发一次。因此只有一个节点被扩展(没有子节点),因此不会停留在循环中。虽然我还想扩大 sibling 。
有没有明确的方法来实现这一点?
我想打开所有节点,并在用户点击取消按钮时停止加载。
最佳答案
一旦调用open_all
,就无法停止加载。它将继续加载,直到树容器中没有带有 jstree-close
类的节点为止。
也许您可以采用不同的方法 - 返回所有嵌套子级以及第一个请求。这样,所有内容都将在单个(或几个)请求中加载,而不是每个节点一个请求。如果你的树不太大,那么速度会很快,而且没有什么可以取消的。
抱歉,但据我所知,没有其他解决方案。无法停止 open_all
调用。
关于javascript - 停止在 JSTree 中的 Ajax 加载/延迟加载中加载节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32308880/