1

我正在开发一个 Blockly 项目,其中我将块中的数据作为 JavaScript 代码传递。我想更改从块输出的一些代码,使其对初学者更加友好。

可以通过编辑“generators/javascript”文件夹中的代码来更改块中的输出 JS 代码,但是标题为“Change by”(下图)的变量块似乎在generators/javascript/variables.js文件中没有生成器,但它仍然按原样生成代码,而不对文件进行任何更改variables.js

这

基本上,我希望能够编辑此“更改”块的代码输出,但是我目前找不到执行此操作的方法。任何帮助将不胜感激。

4

1 回答 1

0

在 Blockly 中,并非所有与类别关联的块都必须在命名的类别文件中找到。这里就是这种情况。

找出要查看的文件和函数的一个好方法是转到Blockly 演示 - 代码编辑器,它允许您将块导出为 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_前缀 toblockly/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';
};

将此函数添加到您的脚本中以覆盖现有实现并将其替换为您所需的逻辑。

于 2020-10-19T02:26:08.950 回答