配置块 - 使用自定义JavaScript生成器


title: 配置块 - 使用自定义JavaScript生成器

Configure Blockly - Using custom JavaScript Generators

原文链接;https://developers.google.com/blockly/guides/configure/android/custom-generators

使用自定义JavaScript生成器

生成器将块转换为文本字符串,通常是传统的编程语言。 Blockly for Android使用与原始网页Blockly相同的JavaScript生成器框架,并且默认情况下生成JavaScript。

加载生成器函数


对于继承 AbstractBlocklyActivity的activities,生成器文件通过重写AbstractBlocklyActivity.getGeneratorsJsPaths()来提供。活动必须实现此方法,返回指向所需生成器的应用程序资产路径的列表。除了Blockly的标准块的JavaScript语言核心生成器文件之外,还会加载这些文件。此方法在每次触发代码生成时调用,因此列表可以是动态的或上下文的。

就像块定义文件一样,可以加载多个.js文件。文件按顺序加载,因此重复的ID(指块定义)将导致替换以前的生成器定义。

示例JavaScript块实现


以下是Turtle demo 中使用的生成器的示例。

Blockly.JavaScript['turtle_width'] = function(block) {
  // Generate JavaScript for setting the width.
  var width = Blockly.JavaScript.valueToCode(block, 'WIDTH',
      Blockly.JavaScript.ORDER_NONE) || '1';
  return 'Turtle.penWidth(' + width + ');\n';
};

该代码位于blocklydemo/assets/turtle/generators.js
中的匹配块定义旁边的TurtleActivity.getGeneratorsJsPaths
中。 TurtleActivity.getGeneratorsJsPaths
通过常量TURTLE_BLOCK_GENERATORS
返回此路径。

该函数生成turtle_width块的代码,接收为其WIDTH输入生成的代码字符串(如果未设置,则为'1'),并包装在Turtle.penWidth(..)函数调用中。结果可能看起来像这些:

Turtle.penWidth(3);
Turtle.penWidth(x);
Turtle.penWidth(x / 2);

或关于写生成器的更多细节,请参阅Generating Code。

使用其他语言

***截至2016年5月,Blockly for Android假定目标语言是JavaScript。如果要使用其他语言,则需要使用您自己的语言生成核心替换javascript_compressed.js的引用。主Blockly库具有用于几种流行语言的generators

代码生成器如何运行


Blockly for Android在后台服务中维护一个WebView以运行用JavaScript编写的生成器。 代码在CodeGeneratorService类中。大多数应用程序开发人员应该只需要通过扩展AbstractBlocklyActivity提供的更高级别的API,并且可以忽略此详细信息。

你可能感兴趣的:(配置块 - 使用自定义JavaScript生成器)