2013-05-01 8 views
8

Znalazłem tę funkcję, aby usunąć element GUI, ale myślę, że jest nieaktualny. Do tej pory nie udało mi się znaleźć nikogo, kto wie, jak usunąć jakąkolwiek część gui, czy to cały dat.GUI(), czy tylko dodany element do dat.GUI(). Pierwszy prawdopodobnie wystarczy na to, czego potrzebuję (po prostu usunięcie dat.GUI() razem), ale jeden byłby super pomocny!Jak usunąć element dat.GUI?

powinien usunąć dat.GUI()

gui = new dat.GUI(); 

...

removeGui(gui); 

function removeGui(gui, parent) 
{ 
    if(!parent) 
    { 
     parent = dat.GUI.autoPlaceContainer; 
    } 
    parent.removeChild(gui.domElement); 
} 

Ale oddaje błąd: nie można wywołać metodę 'removeChild' undefined, więc zgaduję, że autoPlaceContainer jest złe.

Oryginalny autor tej funkcji lewej te Uwagi:

gdzie gui Parametry reprezentuje DAT.GUI chcesz usunąć, a rodzic jest rodzicem, gdzie pojemnik, jeśli nie określono DOMElement przy uruchamianiu DAT. GUI, więc nie musisz przekazywać rodzica.

+3

WOW! Przeszedłem więc przez cały kod źródłowy dat.GUI i znalazłem funkcję destroy(), więc spróbowałem i zadziałało ... z powyższego przykładu wszystko, co musisz zrobić, to gui.destroy(); – user2287949

+1

Właśnie próbowałem użyć 'gui.destroy()' ale daje mi błąd: 'destroy nie jest funkcją'. Czy możesz podać dokładnie to, co zrobiłeś w odpowiedzi? – Bakuriu

Odpowiedz

6
var gui = new dat.GUI(); 
item = gui.add(text, 'message'); 

Aby usunąć:

gui.remove(item); 

Jeśli pozycja jest wewnątrz folderu, trzeba zrobić:

folder.remove(item); 
+6

Podczas korzystania z opcji usuwania ciągle pojawia się błąd "Nie można wykonać" removeChild "w węźle" Węzeł, który ma zostać usunięty, nie jest potomkiem tego węzła " –

+0

To samo dla mnie ... czy znalazłeś rozwiązanie Ash Blue? –

+1

Ok, znalazłem rozwiązanie, nie jestem pewien, czy to zadziała dla ciebie Ash. Za każdym razem, gdy używasz .min() lub .max(), musisz ponownie przypisać kontroler do var: 'var theItem = gui.add (obj, 'x'); theItem = theItem.min (0) .max (10); ', na przykład. Z drugiej strony, jeśli chcesz dołączyć detektor, nie łańcuchuj go i nie przypisuj go do var. Tak samo jak "theItem = theItem.min (0) .max (10); theItem.onChange (function (value) {console.log (value);}); 'a nie' theItem = theItem.min (0) .max (10) .onChange (funkcja (wartość) {console.log (wartość);}); '. Mam nadzieję, że to pomaga, nie mam czasu na dalsze badania na ten temat ... –

4

Jeśli chcesz usunąć cały element dat.GUI wraz ze wszystkimi jego słuchaczy, można użyć gui.destroy()

+0

OK - więc muszę powiedzieć - nie usuwa to wszystkich kontrolerów nasłuchujących - jeśli chcesz to zrobić poprawnie, musisz usunąć kontrolery z tablic __listening (również wewnątrz instancji __folders property) i wywołaj updateDisplays z pustą tablicą. – cybafelo