【问题标题】:Blockly - How to alter the generated JavaScript code of the "Change Variable by..." blockBlockly - 如何更改“Change Variable by...”块生成的 JavaScript 代码
【发布时间】:2020-05-31 05:43:35
【问题描述】:
我正在开发一个 Blockly 项目,在该项目中,我将块中的数据作为 JavaScript 代码传递。我想更改从块中输出的一些代码,使其对初学者更加友好。
可以通过编辑“generators/javascript”文件夹中的代码来更改块中的输出 JS 代码,但是标题为“Change by”(下图)的变量块似乎没有生成器在generators/javascript/variables.js 文件中,但它仍然按原样生成代码,而不对variables.js 文件进行任何更改。
基本上,我希望能够编辑从此“更改”块输出的代码,但是我目前找不到执行此操作的方法。任何帮助将不胜感激。
【问题讨论】:
标签:
javascript
node.js
code-generation
blockly
google-blockly
【解决方案1】:
在 Blockly 中,并非所有与类别相关的块都必须在命名的类别文件中找到。这里就是这样。
确定要查看的文件和函数的一个好方法是转到Blockly demos - code editor,它可以让您将块导出为 XML。将您有兴趣检查生成器源代码的块拖到工作区中,在本例中,它是“变量 -- 更改依据”块,然后导出到 XML:
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="F;)U+)(_^:3!Z~mxvyWO">asd</variable>
</variables>
<block type="math_change" id="xXz{jIXrbvaz9DcE*7O6" x="338" y="88">
<field name="VAR" id="F;)U+)(_^:3!Z~mxvyWO">asd</field>
<value name="DELTA">
<shadow type="math_number" id="d5W].A}ldwUj2~+0PKnj">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</xml>
这显示block type="math_change",因此我们将math_ 前缀添加到blockly/generators/javascript/math.js 而不是variables.js:
blockly.javascript['math_change'] = function(block) {
// add to a variable in place.
var argument0 = blockly.javascript.valuetocode(block, 'delta',
blockly.javascript.order_addition) || '0';
var varname = blockly.javascript.variabledb_.getname(
block.getfieldvalue('var'), blockly.variable_category_name);
return varname + ' = (typeof ' + varname + ' == \'number\' ? ' + varname +
' : 0) + ' + argument0 + ';\n';
};
将此函数添加到您的脚本中以覆盖现有实现并将其替换为您想要的逻辑。