如何在Blockly中渲染块?

时间:2019-05-21 08:40:19

标签: javascript blockly

我仔细阅读了Workspace文档,并尝试使用newBlock方法,如下所示:

var block = workspace.newBlock("string_length")添加一个自定义块,其定义如下:

Blockly.Blocks['string_length'] = {
  init: function() {
    this.jsonInit({
      "message0": 'length of %1',
      "args0": [
        {
          "type": "input_value",
          "name": "VALUE",
          "check": "String"
        }
      ],
      "output": "Number",
      "colour": 160,
      "tooltip": "Returns number of letters in the provided text.",
      "helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
    });
  }
};

当无法识别出块原型名称,但似乎可以识别并分配其唯一ID和其他信息时,Blockly往往会引发异常。

即使试图将其添加到顶部块中,该块还是不可见。

1 个答案:

答案 0 :(得分:-1)

手动添加块时,您必须完成某些过程。

确保正确添加了块,这意味着block = workspace.newBlock("your_type")不会引发错误,并且块已初始化。

接下来,您必须调用block.initSvg()函数,文档说您必须调用initSvg()initModel()函数:

  

在块上的所有字段上调用initModel。可能被称为   一旦。创建了一个init之后,必须调用initModel或initSvg   封锁,并且在与它第一次互动之前。互动包括   UI操作(例如,单击和拖动)和触发事件(例如,   创建,删除和更改)。

但是initModel()函数似乎给了我与尚未初始化它相同的错误,据我所知,文档也没有对两者进行清楚的区分。

调用initSvg()函数后,您应该能够通过在 workspace 对象上调用.render()来渲染所需的块。

来源:

Block documentation

Workspace documentation