用dat.gui保存参数似乎坏了?

时间:2014-03-29 10:46:58

标签: javascript save dat.gui

在dat.gui中保存参数似乎有问题,或者我遗漏了一些非常明显的东西..

单击齿轮图标时会出现问题,该图标应打开一个带有要保存的JSON的弹出窗口。保存到本地存储也不适合我。这是两个JSFiddles:

他们在线的样本工作正常(请参阅评论链接)。但他们已经最小化了所有示例代码,包括lib本身。如果他们甚至使用最新版本,我甚至无法解决。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

我错误地以错误的顺序调用gui.remember(obj);gui.add(obj, 'x');

所以这就是解决方案:

var obj = { x: 5 };
var gui = new dat.GUI();
gui.remember(obj);
gui.add(obj, 'x');

当调用gui.add()函数时,dat.gui会记住要记住的对象的内部映射。保存值时,此地图gui.__rememberedObjectIndecesToControllers[]将在内部getCurrentPreset()函数中使用。

但是,只有在gui.__rememberedObjects[]中存储对象时才会向该地图添加对象,这就是订单如此重要的原因。

缩小版本引发错误的原因是,当它试图从gui.__rememberedObjectIndecesToControllers[]获取映射值时,它会尝试循环undefined值。

http://workshop.chromeexperiments.com/examples/gui/#5--Saving-Values上的示例实际上显示了这个正确的顺序,我只是忽略了它:

var fizzyText = new FizzyText();
var gui = new dat.GUI();

gui.remember(fizzyText);

// Add controllers ...

答案 1 :(得分:1)

使用缩小版本时,只会出现错误。当我使用调试版本时,它对我没有错误。

至于没有出现的x属性,对我来说也是如此。 我发现我需要单击齿轮图标一次,关闭弹出窗口,单击还原,然后再次单击齿轮图标,然后弹出窗口显示正确的数据。

使用FizzyText示例代码的情况也是如此。

但是,如果你使用弹出窗口中的内容作为dat.gui构造函数中的load参数,即使没有x属性,它也会在页面加载时按预期工作:

var gui = new dat.GUI({load:
{
  "preset": "Default",
  "closed": false,
  "remembered": {
    "Default": {
      "0": {"x": 8}
    }
  },
  "folders": {}
}
});

所以我建议这样做,这在技术上也是他们在弹出窗口中的指示,虽然我必须说这是非常不清楚的。