1

サーバーへのajax呼び出しを使用してすべてのツリー項目がロードされ、各フォルダーの子を設定するjstreeツリーがあります。ツリーをドリルダウンし、関数に渡すものに応じて子を選択する関数を構築しようとしています。私は現在これを行うために次の関数を使用していますが、私の $.when(...).done(...) 関数はオープンが発生するのを待っていないため、その下の子をロードできません。

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 呼び出しが終了するのを待っているのはなぜですか?

4

1 に答える 1

3

$.when()引数が jQuery $.Deferredであることを期待しています。

おそらくtree.jstree()何か他のものを返します。

于 2012-11-23T01:13:41.243 に答える