#javascript #json #dat.gui
#javascript #json #dat.gui
Вопрос:
Я динамически добавляю элементы управления в интерфейс dat.gui, но функция «сохранить настройки» их не распознает.
var mygui = new dat.GUI();
mygui.remember(mygui);
// standard way of adding a control
mygui.control1 = 0.0;
var control = mygui.add(mygui, 'control1', -1, 1);
// adding controls dynamically
var myArray = ['control2', 'control3'];
var controls = [];
for (x in myArray) {
controls[myArray[x]] = 0.0;
var newControl = mygui.add(controls, myArray[x], -1, 1);
}
Все элементы управления работают должным образом, но когда я нажимаю значок шестеренки, JSON настроек содержит только первый элемент управления или любые другие элементы управления, которые я добавляю обычным способом:
{
"preset": "Default",
"closed": false,
"remembered": {
"Default": {
"0": {
"control1": 0.5,
}
}
},
"folders": {}
}
Я предполагаю, что я как-то путаю функциональность remember (), есть идеи?
Ответ №1:
Строки в цикле for должны быть:
mygui[myArray[x]] = 0.0;
var newControl = mygui2.add(mygui, myArray[x], -1, 1);
Первый параметр add
функции выполняет две функции: он является как источником второго параметра (имя добавляемого элемента управления, которым в данном случае является myArray[x]), так и местом назначения. Вы можете хранить имена элементов управления где угодно, но если первый параметр не является gui, remember()
функция не будет знать об элементах управления, и они не будут добавлены в атрибут gui __rememberedObjects
или сохранены в объекте JSON.
Комментарии:
1. Блестящий ответ! Если кто-то действительно хочет , чтобы графический интерфейс не запоминал определенную настройку, он должен дополнительно настроить
newControl.isModified = function() { return false; };
, чтобы он не показывал звездочку рядом с именем предустановки.