Javascript dat.GUI不';我更改对象时不会更新 问题描述:

Javascript dat.GUI不';我更改对象时不会更新 问题描述:,javascript,dat.gui,Javascript,Dat.gui,有两个变量: controller1 = {i: 100}; controller2 = {i: 300}; 和控制变量 control = controller1; 我将dat.GUI附加到控件.I gui = new dat.GUI(); controller = gui.add(control, "i"); controller.listen(); 因此,它显示controller1.i的值,当我在dat.GUI中更改值时,它会更改controller1.i的值 gui = new

有两个变量:

controller1 = {i: 100};
controller2 = {i: 300};
控制
变量

control = controller1;
我将dat.GUI附加到
控件.I

gui = new dat.GUI();
controller = gui.add(control, "i");
controller.listen();
因此,它显示
controller1.i
的值,当我在dat.GUI中更改值时,它会更改
controller1.i
的值

gui = new dat.GUI();
controller = gui.add(control, "i");
controller.listen();
之后,我跑:

control = controller2;
当我在
dat.GUI
中更改值时,我希望它更改
controller2.I
,但现在它更改
controller1.I

gui = new dat.GUI();
controller = gui.add(control, "i");
controller.listen();
这是钢笔:

或堆栈片段:

controller1={i:100};
控制器2={i:300};
控制=控制器1;
click.addEventListener(“click”,function()){
control=control==controller1?controller2:controller1;
});
gui=新的dat.gui();
controller=gui.add(控制,“i”);
controller.listen();
setInterval(函数(){
current.textContent=JSON.stringify(控件);
x、 textContent=JSON.stringify(controller1);
y、 textContent=JSON.stringify(controller2);
},1000/24)

控制器1:
控制器2: 更改控制器
当前控制器的值:
问题在于,通过调用
controller=gui.add(control,“i”)
传递的是
控件的引用(当前
controller1
),而dat.gui创建了该引用的内部副本。因此,如果覆盖ClickEventListener dat.gui中的
控件
,则仍然保留对
controller1
的引用,并且dat.gui上的所有更改都趋向于
controller1
。我在dat.gui中找不到任何重置传递的引用的可能性,除了删除先前添加的控制器并传递一个新的控制器。

我很愚蠢。。。这非常简单:

click.addEventListener("click", function() {
  control = control == controller1 ? controller2:controller1;
  controller.object = control;
  // change the internal reference in dat.GUI
});
在检查
dat.GUI
对象之后,我发现了这种方法


测试用例:

我已经知道了
dat.GUI
保存一个内部引用。我想要的是找到在dat.gui中重置传递的引用的任何可能性,而不删除先前添加的控制器并传递新的控制器。但是谢谢你回答这个问题。一定有人在回答这个问题,否则赏金会被扔进垃圾桶。我为什么得到你的赏金?你能把它钉回去吗?“我的回答不能解决你的问题。”桑德罗伊德读了我的评论。如果我不给你赏金,赏金就会变成垃圾。