从jstree节点清除缓存

时间:2015-04-02 21:11:07

标签: jstree

我想在每次用户打开节点时强制执行ajax调用,即没有缓存。有点谷歌搜索建议在用户关闭节点后删除节点的子节点。看起来很简单,但我无法让它发挥作用 在下面的代码中,事实上已经触发了after_close事件,但删除子节点的三个语句似乎没有效果。我得出结论是因为我在首次打开节点时观察fiddler中的初始ajax调用,但是关闭节点并重新打开它不会产生调用。 笔记:   我使用随机数参数来防止在浏览器上缓存。   我已经设置了' check_callback'标记符the documentation

// load the tree
        $('#tree').jstree({
            'core': {
                "themes": { "theme": "classic", "dots": false, "icons": false },
                'html_titles': true,
                'load_open': true,
                'data': {
                    'url': 'GetChildNodes/',
                    'data': function (node) {
                        return { 'id': node.id === '#' ? '0_0' : node.id, 'noCache': Math.random() };
                    }
                },
                'check_callback': function () { return true; }
            },
            "plugins": ["themes", "ui"]
        });

        // Handles tree view links so that the tree view does not intercept the event.
        $("#tree").delegate("a", "click", function (e) {
            if ($("#tree").jstree("is_leaf", this)) {
                document.location.href = this;
            }
            else {
                $("#tree").jstree("toggle_node", this);
            }
        });

        $('#tree').on('after_close.jstree', function (e, data) {
            var tree = $('#tree').jstree(true);
            var children = tree.get_children_dom(data);
            tree.delete_node(children);
        });

1 个答案:

答案 0 :(得分:1)

使用此:

    $('#tree').on('after_close.jstree', function (e, data) {
        var tree = $('#tree').jstree(true);
        tree.delete_node(data.node.children);
        tree._model.data[data.node.id].state.loaded = false;
    });