javascript - dat.gui:更新 Controller 的下拉列表值?

标签 javascript dat.gui

我想弄清楚是否可以只更新 dat.gui Controller 的下拉列表值。

var gui = new dat.GUI();
gui.add(this, 'toggle').onChange( updateToggle );
gui.add(item, 'template', [ 'A', 'B', 'C', 'D' ]).onChange( updateTemplate );

切换时,我想修改模板选项:

if (startRibbon) {
     gui.__controllers[1].options(['A', 'B']);
} else {
     gui.__controllers[1].options(['A', 'B', 'C', 'D']);
};

这确实改变了值,但它创建了一个带有新索引的新模板 Controller (删除之前的索引)并使其下次无法工作。它还将新的推送到 Controller 列表的底部。

在我添加更多代码来尝试追逐新的修改/新 Controller 之前,我想我应该看看是否有人有更好的方法。

最佳答案

只需更新下拉列表的 html 内容即可。

function updateDropdown(target, list){   
    innerHTMLStr = "";
    for(var i=0; i<list.length; i++){
        var str = "<option value='" + list[i] + "'>" + list[i] + "</option>";
        innerHTMLStr += str;        
    }

    if (innerHTMLStr != "") target.domElement.children[0].innerHTML = innerHTMLStr;
}

dropdown = gui.add(MyObject, 'Values', ['A', 'B']);

updateDropdown(dropdown , ['A', 'B', 'C', 'D']);

关于javascript - dat.gui:更新 Controller 的下拉列表值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18260307/

相关文章:

javascript - 如何在 htlm 和 java 脚本中使用从 firebase 数据库检索的纬度和经度在 map 上显示标记

javascript - Three.JS中使用switch语句加载多个对象

javascript - 网络开发新手,遇到错误(jsfiddle)

javascript - 是否可以在 C 上实现延迟(非严格)数组?

three.js - 如何使用 dat.gui 控制 textGeometry 的大小和颜色?

javascript - 默认下拉值 dat.gui

javascript - 使用 dat.GUI 按钮加载文件?

javascript - 将 dat.GUI 下拉菜单字符串映射到值

javascript - setTimeout() 函数未检测到状态变化并继续执行递归函数

javascript - 在调用 combineReducers 时隐式实例化的函数类型中声明的类型参数缺少类型注释