次のコードで作成したjstreeがあります。
$('#mytree').jstree({"core": { "data" : value
, "themes" : { "dots": false
, "icons": false }
}
}
);
このコードにより、新しいデータで再構築できます。
$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();
しかし、多くのノードがある場合は高価になる可能性があります。私が達成したいのは、要素の値を更新することです(つまり、node.text
part)ツリー全体を再構築せずに。 1つのメッセージで_websocketを介して新しい値を取得します(new_data
)しかし、構造は変化していません。どうやってやるの?ありがとうございました!
必要なのはrefresh()
ではなくredraw()
なので、コードは
$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).redraw(true);
関数は jstree API にあります。
Zmircの提案に従って、v3.1では次を使用します。
$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();
ノードを削除してツリーをリロードする
$('#mytree').jstree(true).refresh();
ツリーを再起動せずに再描画する必要がある人向け
jQuery('#data').jstree(true).refresh(true);
URL経由でデータをロードするため、更新部分は次のようになります。
$('#groupTree').jstree(true).settings.core.data.url = get_group_url();
$( '#mytree')。jstree(true).refresh();動作していますが、私の場合はスレッドリークが発生します。更新するたびにスレッドが1つ追加されます
これでノードを更新できます
$('#treeView').jstree(true).refresh_node("node_id_here")