小编Stu*_*t01的帖子

如何从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 ×1

google-blockly ×1