我仔细阅读了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往往会引发异常。
即使试图将其添加到顶部块中,该块还是不可见。
答案 0 :(得分:-1)
手动添加块时,您必须完成某些过程。
确保正确添加了块,这意味着block = workspace.newBlock("your_type")
不会引发错误,并且块已初始化。
接下来,您必须调用block.initSvg()
函数,文档说您必须调用initSvg()
或initModel()
函数:
在块上的所有字段上调用initModel。可能被称为 一旦。创建了一个init之后,必须调用initModel或initSvg 封锁,并且在与它第一次互动之前。互动包括 UI操作(例如,单击和拖动)和触发事件(例如, 创建,删除和更改)。
但是initModel()
函数似乎给了我与尚未初始化它相同的错误,据我所知,文档也没有对两者进行清楚的区分。
调用initSvg()
函数后,您应该能够通过在 workspace 对象上调用.render()
来渲染所需的块。
来源: