$。当不等待Jstree打开功能完成时

时间:2012-11-23 00:45:38

标签: jquery jstree

我有一个jstree树,使用对我服务器的ajax调用来加载所有树项,以填充每个文件夹的子项。我正在尝试构建一个函数,它将向下钻取树并根据我传入函数的内容选择一个子项。我目前正在使用以下函数来执行此操作,但我的$ .when(...)。done(...)函数不等待open发生,然后无法加载它下面的任何子项。

function openNodes(tree, nodesToOpenRaw, selectedNode) {
    var treeObj = $(tree);
    treeObj.one('loaded.jstree', function() {
        openNodesRaw(treeObj, nodesToOpenRaw, selectedNode);
    });
}

function openNodesRaw(tree, nodesToOpen, selectedNode) {
    if (tree.jstree('is_open', nodesToOpen[0])) {
        goToNextNode(tree, nodesToOpen, selectedNode);
    } else {
        $.when(tree.jstree("open_node", nodesToOpen[0])).done(function () {
            if (nodesToOpen[0] == null) {
                goToNextNode(tree, nodesToOpen, selectedNode);
                return;
            }
            goToNextNode(tree, nodesToOpen, selectedNode);
        });
    }
}

function goToNextNode(tree, nodesToOpen, selectedNode) {
    if (nodesToOpen.length > 0 && Object.prototype.toString.call(nodesToOpen) === '[object Array]') {
        var newNodesToOpen = nodesToOpen.slice(0);
        newNodesToOpen.shift();
        openNodesRaw(tree, newNodesToOpen, selectedNode);
    } else {
        tree.jstree("select_node", selectedNode, true);
        tree.unbind('ajaxSuccess');
    }
}

为什么$ .when函数在继续使用下一个函数之前等待tree.jstree(“open_node”,....)的ajax调用完成?

1 个答案:

答案 0 :(得分:3)

$.when()期望其参数为jQuery $.Deferred

据推测,tree.jstree()会返回其他内容。