2014-10-23 15 views
11

Mam jstree że utworzony z następującego kodu:Jak zaktualizować wartości węzłów jstree bez przeładowania

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

mogę odbudować ją o nowe dane przez ten kod:

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

ale może być drogi, gdy masz dużo węzłów. Chciałbym osiągnąć aktualizację wartości elementów (tj. Części node.text) bez odbudowywania całego drzewa. Dostaję nowe wartości przez websocket w jednym komunikacie (kompletny ciąg JSON, który będzie new_data), ale struktura się nie zmienia. Jak mogę to zrobić? Dziękuję Ci!

Odpowiedz

17

Co trzeba nie jest refresh() ale redraw() ten sposób kod jest

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

można znaleźć funkcji w jstree API.

Zgodnie zmirc sugestię, w użyciu v3.1:

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

W wersji 3.1.0 wygląda na to, że nie działa, chyba że przerysowanie (true) zostanie zastąpione przez refresh(). – zmirc

+3

Próbowałem użyć tego i wydaje się, że działa, ale stan obiektów nie wydaje się być aktualizowany. Czy możliwe jest wymuszenie nowo narysowanego drzewa na zgodności z opcjami stanu podanymi w pliku new_data? – OganM

1

usuwania węzła i przeładować drzewo

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

dla tych, którzy potrzebują odświeżenia bez ponownego uruchomienia użyć drzewo

jQuery('#data').jstree(true).refresh(true); 
Powiązane problemy