web-dev-qa-db-fra.com

Comment mettre à jour les valeurs de nœud jstree sans recharger

J'ai un jstree que j'ai créé avec le code suivant:

$('#mytree').jstree({"core": { "data" : value
                             , "themes" : { "dots": false
                                          , "icons": false }
                             }
                    }
                   );

Je peux le reconstruire avec de nouvelles données avec ce code:

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();

mais cela peut coûter cher quand vous avez beaucoup de nœuds. Ce que j'aimerais réaliser, c'est que je souhaite mettre à jour la valeur des éléments (c'est-à-dire la partie node.text) sans reconstruire l'arbre entier. Je reçois les nouvelles valeurs via websocket dans un message (la chaîne JSON complète qui sera le new_data) mais la structure ne change pas. Comment puis je faire ça? Je vous remercie!

16
Gabor Meszaros

Ce dont vous avez besoin n’est pas refresh() mais redraw() et le code est

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).redraw(true);

Vous pouvez trouver les fonctions dans l'API jstree .

Selon la suggestion de zmirc, dans v3.1, utilisez:

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();
21
Gabor Meszaros

pour supprimer le noeud et recharger l'arborescence

 $('#mytree').jstree(true).refresh();

pour ceux qui ont besoin de redessiner sans redémarrer l'utilisation de l'arbre

jQuery('#data').jstree(true).refresh(true);
2
baaroz

$ ('# mytree'). jstree (true) .refresh (); fonctionne, mais dans mon cas, cela provoque une fuite de thread . chaque rafraîchissement ajoute un thread supplémentaire

0
Shlomi Aharoni

Vous pouvez actualiser le noeud par ceci

$('#treeView').jstree(true).refresh_node("node_id_here")
0
Atif