在dat.gui中保存参数似乎有问题,或者我遗漏了一些非常明显的东西..
单击齿轮图标时会出现问题,该图标应打开一个带有要保存的JSON的弹出窗口。保存到本地存储也不适合我。这是两个JSFiddles:
http://jsfiddle.net/navFooh/XZcde/,点击齿轮会在控制台中抛出错误:Uncaught TypeError: Cannot read property 'forEach' of undefined dat.gui.min.js:3
http://jsfiddle.net/navFooh/8Hek6/,点击齿轮图标会显示带有JSON的弹出窗口,但参数x
未显示
他们在线的样本工作正常(请参阅评论链接)。但他们已经最小化了所有示例代码,包括lib本身。如果他们甚至使用最新版本,我甚至无法解决。
非常感谢任何帮助。
答案 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": {}
}
});
所以我建议这样做,这在技术上也是他们在弹出窗口中的指示,虽然我必须说这是非常不清楚的。