我在我的应用程序中使用JSTree和Ajax加载/延迟加载功能。
现在我正在尝试打开所有节点。所以在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"事件只被触发一次。因此,只扩展了一个节点(没有子节点),因此不会停留在循环中。虽然我还想扩大兄弟姐妹。
有没有明确的方法来实现这一点?
我想打开所有节点,并在用户点击取消按钮时停止加载。
答案 0 :(得分:1)
调用open_all
后无法停止加载。它将继续加载,直到树容器中没有jstree-closed
类的节点。
也许您可以采用不同的方法 - 返回所有嵌套的子项以及第一个请求。这样一切都将被加载到单个(或几个)请求中,而不是每个节点的一个请求。如果您的树不是太大而且速度非常快,并且没有任何东西可以取消。
很抱歉,但我看不到其他任何解决方案。无法停止open_all
来电。