正在刷新 dat.gui 变量

Refreshing dat.gui variable

这是 dat.gui 界面中的下拉列表。单击任意数字后,jumpSwitcher 将是您选择的任何数字。我正在尝试根据用户为 Starsystem.

选择的内容替换与其特定编号相关的每个列表

所以 solPlanets= ['Ilos', 'Tuchanka', 'Illium', 'Palaven'] 是当您单击 2 时列表 2 中显示的内容。默认情况下,solPlanets 显示 ['Mercury'、'Venus'、'Earth'、'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune'] 因为默认是 jumpSwitcher = 1.

问题是,列表将始终显示为 solPlanets= ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune'],无论 jumpSwitcher 是否为 2。

我通过在 jumpSwitcher 为 2 时发出警报消息来确认这一点,警报弹出,但列表不会改变。 这可能与 dat.gui 不更新的类似问题有关。 我已经尝试过 listen() 方法,因为它是给出的主要答案,但它对我没有用。

我做了一个fiddle

PS:我以前问过这个问题,但现在我意识到这可能与 dat.gui 不刷新值而不是 javascript 有关。所以我删除了那个问题,因为它有点触及了错误的受众,我没有为它做 fiddle。

您必须为行星列表重新创建控制器。

我修改了你的 jsfiddle 示例 here

中的主要内容
function updatePlanets(id) {
    var controller = gui.__controllers[2];
    controller.remove();
    gui.add(data, 'Planets', planets[id]).onChange(doSomeStuff);

    //back to 0 element
    data.Planets = 0;
    gui.__controllers[2].updateDisplay();
}

此外,当我将 DAT.GUI 的版本更改为 0.6.1

时,它开始工作了