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

时间:2015-08-31 10:12:22

标签: javascript jquery jstree

我在我的应用程序中使用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"事件只被触发一次。因此,只扩展了一个节点(没有子节点),因此不会停留在循环中。虽然我还想扩大兄弟姐妹。

有没有明确的方法来实现这一点?

我想打开所有节点,并在用户点击取消按钮时停止加载。

1 个答案:

答案 0 :(得分:1)

调用open_all后无法停止加载。它将继续加载,直到树容器中没有jstree-closed类的节点。

也许您可以采用不同的方法 - 返回所有嵌套的子项以及第一个请求。这样一切都将被加载到单个(或几个)请求中,而不是每个节点的一个请求。如果您的树不是太大而且速度非常快,并且没有任何东西可以取消。

很抱歉,但我看不到其他任何解决方案。无法停止open_all来电。