web-dev-qa-db-fra.com

Comment redessiner l'arbre jstree avec de nouvelles données?

Donc, ma question. J'ai initialisé mon arbre avec quelques données:

$('#tree').jstree({
    'core' : {
        'data' : [
            'Simple root node',
            {
                'id' : 'node_2',
                'text' : 'Root node with options',
                'state' : { 'opened' : true, 'selected' : true },
                'children' : [ { 'text' : 'Child 1' }, 'Child 2']
            }
        ]
    });

Mais après quelques actions, je veux redessiner l'arbre avec de nouvelles données. J'essaie d'utiliser les méthodes refresh et redraw de l'API, mais sans succès.

Pouvez-vous me donner des conseils sur la façon de rafraîchir l'arborescence (sans détruire -> créer une nouvelle instance (cela fonctionne, mais cela affectera les performances))?

22
user2680139

À la version 3, vous pouvez recharger l'arborescence:

$('#treeId').jstree(true).settings.core.data = newData;
$('#treeId').jstree(true).refresh();
14
faxiubite

refresh() rafraîchira l'arborescence à son état initial, ce qui signifie que les nœuds nouvellement créés sont supprimés

Ce que vous voulez c'est redraw(true)

8
user3926752

Essayez d'inclure le paramètre check_callback dans vos paramètres de base (y compris la charge initiale) et assurez-vous qu'il est défini sur true. Vous devriez alors pouvoir voir toutes les modifications apportées. Sans cela, j'ai constaté que je ne vois pas les données de remplacement, juste les données d'origine.

$('#tree').jstree({
'core' : {
    'check_callback' : true,
    'data' : [
        'Simple root node',
        {
            'id' : 'node_2',
            'text' : 'Root node with options',
            'state' : { 'opened' : true, 'selected' : true },
            'children' : [ { 'text' : 'Child 1' }, 'Child 2']
        }
    ]
});

Cela a géré la partie d'actualisation pour moi, mais selon ce que vous faites, vous pouvez également appeler $('#tree').jstree('refresh');.

6
Neil Cresswell