标签: google-blockly

如何在 Blockly 中隐藏/删除字段?

如何根据下拉值更改隐藏字段。

我添加了一个名为“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)

javascript blockly google-blockly

3
推荐指数
1
解决办法
1740
查看次数

如何从Blockly中的input_statement获取语句堆栈?

所以这就是有问题的块

截屏

{
    "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)

blockly google-blockly

1
推荐指数
1
解决办法
1492
查看次数

标签 统计

blockly ×2

google-blockly ×2

javascript ×1