5

我知道我可以使用

Blockly.JavaScript['my_code'] = function() {  ... }

但是如何添加另一种语言支持,如 JSON?我试过了 ..

Blockly.Json['my_code'] = function() {  ... }

当我尝试恢复时它失败了

Blockly.Json.workspaceToCode(this.workspace)

workspaceToCode不是函数。

我需要向 Blockly 添加新语言

我不会展示这种新语言 (JSON),它只会用于向机器人发送指令。


我试着

Blockly.Json = new Blockly.Generator('Json');
Blockly.Json['my_code'] = function() {  ... }

但是发生了错误

Blockly.Json.workspaceToCode(this.workspace)

错误 ..

Uncaught TypeError: this.init is not a function
    at js.ou3v.module.exports.Blockly.Generator.workspaceToCode
4

1 回答 1

8

为 Blockly 创建一个新的语言生成器是一项相当大的任务,考虑到这一点,文档似乎没有提供太多帮助来创建一个。根据我的经验,构建生成器的最佳方法是查看generators/

中现有的生成器,我已将JavaScript生成器用作我想要生成 C++ 代码的项目的模板。 还值得注意的是,Block Factory 生成 JSON 以用于其他 Blockly 应用程序,但是当我查看代码时,并没有为它定义实际的生成器。



我认为你得到的错误是因为 Blockly.Json 没有 init 函数。这是在现有生成器文件中定义的内容,例如,来自 JavaScript 生成器:

/**
* Initialise the database of variable names.
* @param {!Blockly.Workspace} workspace Workspace to generate code from.
*/
Blockly.JavaScript.init = function(workspace) {
  ....
};

考虑到这一点,您的函数将如下所示:

/**
* Initialise the database of variable names.
* @param {!Blockly.Workspace} workspace Workspace to generate code from.
*/
Blockly.Json.init = function(workspace) {
 .....
};

生成器文件还包含其他功能,但查看现有代码并根据您的需要对其进行调整应该会对您有所帮助。

于 2018-03-01T19:16:00.363 回答