javascript - 停止在 JSTree 中的 Ajax 加载/延迟加载中加载节点

标签 javascript jquery jstree

我在我的应用程序中使用带有 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/

相关文章:

Javascript长整数

javascript - 将 JQuery 函数更改为 AngularJS

jquery - 数据表 数据的延迟加载。如何动态传递 "deferLoading"值

javascript - 使用 jstree 插件显示选定的树

javascript - JsTree 拖放 - 移动时图标不显示

javascript - JsTree:使用 "open"插件更改文件夹的 "types"图标

javascript - 通过选择更改 div 内容的脚本在 Firefox 中不起作用

javascript - 使用 rxjs 修改 observable 中的数组,返回整个对象

javascript - 我很难从 json 对象检索数据

javascript - 如何使用 KnockoutJS 为 iframe 数据绑定(bind)内容?