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

Posted

技术标签:

【中文标题】为动态添加的控件保存 dat.gui 预设?【英文标题】:Save dat.gui presets for dynamically added controls? 【发布时间】:2014-06-20 20:53:43 【问题描述】:

我正在向 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】:

for 循环中的行应该是:

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

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

【讨论】:

绝妙的答案!如果有人碰巧确实想要 GUI记住某个设置,他们应该另外设置newControl.isModified = function() return false; ; 以防止它在预设名称旁边显示星号。

以上是关于为动态添加的控件保存 dat.gui 预设?的主要内容,如果未能解决你的问题,请参考以下文章

js动态添加带WdatePicker日期控件的文本框

winform DataGridView 动态添加一列控件(自定义控件)

dat.gui如何在一行添加两个控件

dat.gui如何改变控件的摆放位置

动态加载数据/从引用加载数据(动态过滤)

C# WPF后台动态添加控件(经典)