首页 > 解决方案 > 如何在 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 倾向于抛出异常。

即使在尝试将其添加到顶部块之后,该块也变得不可见。

标签: javascriptblockly

解决方案


手动添加块时,您必须经历一个特定的过程。

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

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

对块上的所有字段调用 initModel。可以多次调用。initModel 或 initSvg 必须在创建块之后和第一次交互之前调用。交互包括 UI 动作(例如单击和拖动)和触发事件(例如创建、删除和更改)。

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

调用该initSvg()函数后,您应该能够通过调用.render()您的工作区对象来呈现想要的块。

来源:

阻止文档

工作区文档


推荐阅读