1

ユーザーがツリー内のさまざまなノードを開いてコンテンツを表示できるようにする jstree の json_data 実装があります。基本的にこれ:

               .jstree({
                "plugins" : [ "json_data", "ui" ],
                "ui" : { "select_multiple_modifier": "on",
                         "selected_parent_close": "deselect" },
                "json_data" : {
                    "ajax" : {
                        "url": function(node) {
                            ... return a url ...
                        },
                        "success": function(metadata, textStatus, jqXHR) {
                            var parent = this._get_node();  // <- RACE CONDITION
                            return parseMetaDataNodes(metadata, parent);
                        }
                    }
                }

最初の AJAX 応答が返される前にユーザーが何らかの方法で 2 つのノードをクリックすると、両方のノードがツリー内で同じ「親」を持っていると見なされ、動作が壊れます。

誰も知っていますか:

  1. 成功のコールバックで正しいノードを取得するより良い方法は?
  2. ツリーをロックして、最初のクリックが戻るまでクリックを受け付けないようにする方法はありますか? (あまり望ましくありませんが、機能する場合もあります。)
4

1 に答える 1

2

私は同様の問題に遭遇しました.2番目の解決策、つまり、フラグがクリアされるまでselect_node関数が実行されないようにすることになりました。

 $("#treeHost").jstree({Your Plugin setup code}).bind("before.jstree", function(event, data) {
                if (data.func == "select_node" && !canSelectNodes) {
                    event.stopImmediatePropagation();
                    return false;
                }
            })

公式ドキュメントによると、before.jstree操作の実行を防ぐためにバインドできる特別なイベントです。実行する関数が であるかどうかを確認し、そうである場合は false の場合はselect_node実行しないでください。canSelectNodes

このようにして、コード内の他の場所でフラグ true と false を切り替えcanSelectNodesて、ツリーがノード選択を受け入れないようにすることができます。

于 2012-08-22T22:52:12.787 に答える