如何根据下拉值更改隐藏字段。
我添加了一个名为“A”的输入字段。我有一个下拉字段。如果我在下拉列表中选择一个值,例如“删除字段 A”,则应删除输入字段。
我试过removeField。但它没有用。还有其他方法吗?或者如何正确使用删除字段?
this.appendDummyInput()
.setAlign(Blockly.ALIGN_RIGHT)
.appendField('Type ')
.appendField(new Blockly.FieldDropdown(typeOptions), 'columnType');
// if columnType = Card, show the following:
this.appendDummyInput()
.setAlign(Blockly.ALIGN_RIGHT)
.appendField(' Card: ')
.appendField(new Blockly.FieldDropdown(cardsList), 'cardValue');
// if columnType = view, show the following:
this.appendDummyInput()
.setAlign(Blockly.ALIGN_RIGHT)
.appendField(' View ')
.appendField(new Blockly.FieldDropdown(viewsList), 'viewValue');
Run Code Online (Sandbox Code Playgroud) 所以这就是有问题的块
{
"type": "local",
"message0": "%{BKY_LOCAL_TITLE}",
"args0": [
{
"type": "input_dummy"
},
{
"type": "input_statement",
"name": "DEFINE",
"check": "Local"
},
{
"type": "input_value",
"name": "EXPRESSION"
}
],
"inputsInline": true,
"output": null,
"style":"local_blocks"
}
Run Code Online (Sandbox Code Playgroud)
它用于函数的局部定义。
“定义”参数包含许多函数和变量定义块。问题是,如果我尝试访问定义,无论我做什么,我都只能获取堆栈中的第一个块。
我尝试直接用statementToCode和BlockToCode调用它
Blockly.JavaScript.valueToCode(block, 'DEFINE', Blockly.JavaScript.ORDER_FUNCTION_CALL) ;
Blockly.JavaScript.statementToCode(block, 'DEFINE', Blockly.JavaScript.ORDER_FUNCTION_CALL);
Blockly.JavaScript.blockToCode(block.getInputTargetBlock('DEFINE')); //neither works
Run Code Online (Sandbox Code Playgroud)
我尝试执行 for 循环,但 DEFINE0、DEFINE1 等不存在。
那么如何真正将块堆叠在 DEFINE 字段中呢?
编辑:我检查了 block.getChildren().length ,它始终为 2(因此表达式 + 定义),这意味着,正如预期的那样,定义列表嵌套在第一个子元素中。
另一个问题可能是定义列表是函数定义,即它们生成如下代码:
Blockly.JavaScript['define_name'] = function(block) {
[...]
Blockly.JavaScript.definitions_['%' + name] = code;
return null;
};
Run Code Online (Sandbox Code Playgroud)
这意味着它们没有返回值。但我仍然应该能够调用它们。当我使用statementToCode或类似的方法时,我确实得到了第一个定义(在图像函数本地定义中),但没有得到其余的。我交换了它们,它总是第一个生成代码的。
所以我真的没有看到这个问题。在其他例子中,他们几乎什么也不做,只是
var branch = …Run Code Online (Sandbox Code Playgroud)