7

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

单击齿轮图标时会出现问题,该图标应打开一个包含要保存的 JSON 的弹出窗口。保存到本地存储也对我不起作用。这里有两个 JSFiddle:

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

任何帮助将不胜感激。

4

2 回答 2

9

我犯了调用错误gui.remember(obj);并且gui.add(obj, 'x');顺序错误。

所以这是解决方案:

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

发生的情况是 dat.gui 在调用gui.add()函数时创建了要记住的对象的内部映射。此映射 ,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 ...
于 2014-03-30T09:42:15.463 回答
1

该错误仅在使用缩小版本时发生在我身上。当我使用调试版本时,它对我来说没有错误。

至于 x 属性没有出现,我也是这样。我发现我需要单击一次齿轮图标,关闭弹出窗口,单击恢复,然后在弹出窗口显示正确数据之前再次单击齿轮图标。

使用他们的 FizzyText 示例代码时也是如此。

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

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

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

于 2014-03-30T08:39:14.883 回答