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 倾向于抛出异常。
即使在尝试将其添加到顶部块之后,该块也变得不可见。
解决方案
手动添加块时,您必须经历一个特定的过程。
确保正确添加了块,这意味着block = workspace.newBlock("your_type")
不会引发错误并且块已初始化。
接下来你必须调用block.initSvg()
函数,文档说你必须调用initSvg()
orinitModel()
函数:
对块上的所有字段调用 initModel。可以多次调用。initModel 或 initSvg 必须在创建块之后和第一次交互之前调用。交互包括 UI 动作(例如单击和拖动)和触发事件(例如创建、删除和更改)。
但是该initModel()
函数似乎给了我与我尚未初始化它时相同的错误,据我所知,文档也没有明确区分两者。
调用该initSvg()
函数后,您应该能够通过调用.render()
您的工作区对象来呈现想要的块。
来源:
推荐阅读
- gis - 如何使用 arcgis Rest API 设置流程?
- php - Laravel,如何将密码重置为用户表中重复的电子邮件
- laravel - 如果数组大小很大,则无法在会话中存储数组 laravel 6
- plot - 无法使用散景 BoxSelectTool 访问选择
- python - Visual Studio Code 的调试器和 pipenv
- javascript - 如何通过 React 中的 api 数据进行映射?
- javascript - 如何使排行榜滑块横幅响应?
- javascript - 如何将图像添加到
标签来自 - javascript - 开玩笑:如何用期望值的子集测试 console.log haveBeenCalled?
- python-3.x - 是否需要提供 access_key 和 secret_key 才能在 lambda 函数中从 s3 访问对象?