为动态添加的控件保存dat.gui预设?

时间:2014-06-20 20:53:43

标签: 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 个答案:

答案 0 :(得分:2)

for循环中的行应为:

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

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