2014-10-23 4 views
11

Ho un jstree che ho creato con il seguente codice:Come aggiornare i valori dei nodi jstree senza ricarica

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

posso ricostruirlo con i nuovi dati da questo codice:

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

ma può essere costoso quando si hanno molti nodi. Quello che vorrei ottenere è che vorrei aggiornare il valore degli elementi (ad esempio la parte node.text) senza ricostruire l'intero albero. Ottengo i nuovi valori via websocket in un messaggio (la stringa JSON completa che sarà il new_data) ma la struttura non sta cambiando. Come lo posso fare? Grazie!

risposta

17

Quello che vi serve non è refresh() ma redraw() in tal modo il codice è

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

si possono trovare le funzioni nel jstree API.

Come da zmirc suggerimento, in uso v3.1:

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

Con v 3.1.0 non sembra funzionare, a meno che il ridisegno (true) sia sostituito con refresh(). – zmirc

+3

Ho cercato di usarlo e sembra funzionare ma lo stato degli oggetti non sembra essere aggiornato. È possibile forzare l'albero appena disegnato a conformarsi alle opzioni di stato fornite nel nuovo_data? – OganM

1

per cancellare il nodo e ricaricare albero

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

per chi ha bisogno di ridisegnare, senza riavviare utilizzare l'albero

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