2

I'm dynamically adding controls to a dat.gui interface, but the "save settings" functionality doesn't recognize them.

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);
}

The controls all work as expected, but when I click the gear icon, the settings JSON only contains the first control, or any other controls I add in the normal way:

{
  "preset": "Default",
  "closed": false,
  "remembered": {
    "Default": {
      "0": {
        "control1": 0.5,
      }
    }
  },
  "folders": {}
}

I assume I'm confusing the remember() functionality somehow, any ideas?

4

1 回答 1

3

for 循环中的行应该是:

mygui[myArray[x]] = 0.0;
var newControl = mygui2.add(mygui, myArray[x], -1, 1);

add函数的第一个参数执行两个功能:它既是第二个参数的(要添加的控件的名称,在本例中为 myArray[x]),也是目标。您可以将控件名称存储在您喜欢的任何位置,但如果第一个参数不是 gui,则该remember()函数将不知道控件,并且它们不会添加到 gui 的__rememberedObjects属性中或保存在 JSON 对象中。

于 2014-06-20T21:30:57.897 回答