可以尝试使用JavaScript中的Generator功能来解决这个问题。以下是一个示例代码,在其中我们定义了一个自定义块“myblock”,并且我们使用一个预定义块来调用它:
Blockly.JavaScript['myblock'] = function(block) {
// Code to be executed when myblock is called
}
function* repeat() {
// Code to be executed inside of the repeat block
}
Blockly.JavaScript['controls_repeat_ext'] = function(block) {
var count = Blockly.JavaScript.valueToCode(block, 'TIMES',
Blockly.JavaScript.ORDER_COMMA) || '0';
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
var code = '';
code += 'for (var count = 0; count < ' + count + '; count++) {\n';
code += branch + '\n';
code += ' yield;\n';
code += '}\n';
return code;
}
这个JavaScript代码中我们使用了Generator功能,在生成的for循环中使用yield
来确保循环在执行预定义块并执行自定义块后,可以重新回到循环顶部。因此,在这个示例代码中,如果我们在Blockly workspace中使用一个重复块来调用repeat
生成器函数,那么该循环将会在执行了myblock
和原始重复块中的语句后重新回到循环顶部,从而达到预期的效果。
下一篇:Blockly组件没有被渲染。