Blockly.FieldDropdown的menuGenerator参数类型技术咨询
我来给你讲清楚Blockly.FieldDropdown里menuGenerator参数能接受的具体类型,结合官方注释和实际开发经验,它有两种合法的输入类型:
1. 二维数组类型
这是最常用的静态场景写法,要求是一个包含子数组的数组,每个子数组必须有两个元素:
- 第一个元素:下拉菜单中展示给用户看的文本内容
- 第二个元素:该选项对应的实际值(会被用于后续的验证逻辑或积木数据存储)
示例代码:
// 定义静态颜色选项 const colorOptions = [ ["红色", "RED"], ["绿色", "GREEN"], ["蓝色", "BLUE"] ]; // 创建下拉字段 const colorDropdown = new Blockly.FieldDropdown(colorOptions);
2. 函数类型
如果你的下拉选项需要动态生成(比如根据外部数据、当前积木状态变化更新选项),就可以传递一个函数作为menuGenerator。这个函数需要满足一个要求:必须返回符合上述格式的二维数组。
Blockly会在每次渲染下拉菜单时调用这个函数,所以能保证每次打开菜单都拿到最新的选项列表。
示例代码:
// 动态生成尺寸选项的函数 function getSizeOptions() { // 模拟从外部数据源获取动态尺寸 const currentSizes = ["小号", "中号", "大号", "加大号"]; // 转换为Blockly要求的二维数组格式 return currentSizes.map(size => [size, size.replace("号", "")]); } // 创建动态下拉字段 const sizeDropdown = new Blockly.FieldDropdown(getSizeOptions);
另外要注意,函数不需要额外传参,Blockly内部会处理调用逻辑,你只需要确保函数返回正确格式的数组即可。
内容的提问来源于stack exchange,提问作者Michele Galliano
相关产品推荐
相关产品推荐

