3

私はajax呼び出しでjstreeプラグインを使用しています。ある時点で、私は電話します

$("#tree").jstree("refresh");

ajax 呼び出しによって作成された新しいノードを取得するため。select_node.jstree が更新時にトリガーされることを除いて、これはうまく機能します。ツリーの更新時に select_node がトリガーされないようにする方法はありますか?

4

5 に答える 5

6

リフレッシュする前にフラグをtrueに設定し、select_nodeイベントトリガーで、フラグがfalseに設定されている場合にのみロジックを実行し、それ以外の場合はfalseに戻して他に何もしませんでした:

refresh = true;
$("#tree").jstree("refresh");

[...]

$("#tree").jstree({...}).bind("select_node.jstree", function (e, data) {
    if (refresh) {
        refresh = false;
    } else {
       // do my thing
    }
 });
于 2012-06-21T15:04:05.343 に答える
2

ツリーを更新する前にノードの選択を解除すると機能します。

于 2013-06-10T17:37:44.187 に答える
2

bool の問題は、現在選択されているノードに子ノードがある場合、子ノードごとに select_node.jstree がトリガーされることです。

代わりに、refresh-function には2 つのパラメーターがあります。2 つ目は、すべての可視ノードを含む core.selected 配列を持つ状態オブジェクトを受け取る bool または関数にすることができます。配列を空にして状態を返すと、select_node.jstree はまったくトリガーされません。

        var tree = $('#mytree').jstree(true); 

        tree.refresh(false, function (state) {
            //console.dir(state);
            state.core.selected = [];
            return state;
        });
于 2015-02-11T09:40:51.273 に答える
2

または、更新後にすべてのノードの選択を解除できます

refresh=true;
$("#tree").jstree("refresh");
$("#tree").jstree("deselect_all");

これはうまくいくはずです!

于 2013-06-06T13:53:33.303 に答える
1

UI プラグインを使用している場合、refresh() 関数は「更新前の選択状態の保存とその後の復元を有効にします」。そのため、現在選択されているノード (更新前) が更新されるノードの子である場合、reselect() 関数をトリガーすることにより、更新後にその状態が復元されます。リフレッシュ機能は次のようにロックします。

refresh : function (obj) {
            var _this = this;
            this.save_opened();
            if(!obj) { obj = -1; }
            obj = this._get_node(obj);
            if(!obj) { obj = -1; }
            if(obj !== -1) { obj.children("UL").remove(); }
            else { this.get_container_ul().empty(); }
            this.load_node(obj, function () { 
                _this.__callback({ "obj" : obj}); 
                _this.reload_nodes(); //this will trigger the reselect() function
            });

私は同じ問題を抱えていて、その行(_this.reload_nodes())にコメントしました。それが最適な解決策だとは思わないが、私の問題は解決した。

于 2013-01-04T14:43:39.440 に答える