2013-05-01 28 views
8

Tôi tìm thấy chức năng này để loại bỏ phần tử gui nhưng tôi nghĩ rằng nó đã lỗi thời. Cho đến nay tôi đã không thể tìm thấy bất kỳ ai khác biết cách loại bỏ bất kỳ phần nào của gui, cho dù đó là toàn bộ dat.GUI() hay chỉ là phần tử được thêm vào dat.GUI(). Việc đầu tiên có lẽ sẽ là đủ cho những gì tôi cần (chỉ cần loại bỏ dat.GUI() tất cả cùng nhau) nhưng một trong hai sẽ là siêu hữu ích!Làm thế nào để xóa phần tử dat.GUI?

phải loại bỏ một dat.GUI()

gui = new dat.GUI(); 

...

removeGui(gui); 

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

Nhưng cho trở lại các lỗi: không thể gọi phương thức 'removeChild' không xác định, vì vậy tôi đoán rằng autoPlaceContainer là sai.

Các tác giả ban đầu của chức năng này để lại những ghi chú:

nơi các thông số gui đại diện cho DAT.GUI bạn muốn loại bỏ và mẹ là thùng phụ huynh mà nếu bạn không nói rõ một DOMElement khi instantiating DAT. GUI sau đó bạn không cần phải vượt qua một phụ huynh.

+3

WOW! Vì vậy, tôi đã đi qua tất cả mã nguồn dat.GUI và tìm thấy hàm destroy(), vì vậy tôi đã thử nó và nó đã hoạt động ... từ ví dụ trên tất cả những gì bạn phải làm là gui.destroy(); – user2287949

+1

Tôi đã cố gắng sử dụng 'gui.destroy()' nhưng nó cho tôi một lỗi: 'phá hủy không phải là một hàm'. Bạn có thể đăng chính xác những gì bạn đã làm trong một câu trả lời? – Bakuriu

Trả lời

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

Để xóa:

gui.remove(item); 

Nếu mục của bạn là bên trong một thư mục, bạn phải làm:

folder.remove(item); 
+6

Khi sử dụng loại bỏ tôi tiếp tục nhận được lỗi này "Không thể thực thi 'removeChild' trên 'Node': Nút bị xóa không phải là nút con của nút này" –

+0

Giống nhau ... bạn có tìm giải pháp Ash Blue không? –

+1

Ok, tôi đã tìm thấy một giải pháp, không chắc chắn liệu nó có phù hợp với bạn không. Mỗi khi bạn sử dụng .min() hoặc .max() bạn phải gán lại bộ điều khiển cho một var: 'var theItem = gui.add (obj, 'x'); Ví dụ: theItem = theItem.min (0) .max (10); '. Mặt khác, nếu bạn muốn đính kèm một người nghe, không xâu chuỗi nó và không gán nó cho một var. Vì vậy, làm 'theItem = theItem.min (0) .max (10); theItem.onChange (hàm (giá trị) {console.log (giá trị);}); 'và không' theItem = theItem.min (0) .max (10) .onChange (hàm (giá trị) {console.log (giá trị);}); '. Hy vọng rằng sẽ giúp, tôi không có thời gian để nghiên cứu thêm về điều này ... –

4

Nếu bạn muốn loại bỏ toàn bộ phần tử dat.GUI cùng với tất cả các thính giả của nó, bạn có thể sử dụng gui.destroy()

+0

Ok - vì vậy tôi chỉ cần nói - điều này không loại bỏ tất cả các bộ điều khiển nghe - nếu bạn muốn có nó được thực hiện đúng, bạn cần phải loại bỏ bộ điều khiển từ mảng __listening (cũng nằm trong thuộc tính instance __folders) và gọi updateDisplays với một mảng trống. – cybafelo

Các vấn đề liên quan