扩展和混入

扩展是指在初始化期间对某个代码块运行的函数。这些插件通常会向代码块添加一些自定义配置或行为。借助混入函数,您可以向代码块添加属性或辅助函数,但不会立即运行它们。

只有在使用 JSON 定义块时,您才需要使用扩展或混入。如果您使用 JavaScript 定义块,则可以直接在 init 中调用初始化函数,并直接将方法或属性添加到定义中。

扩展程序

扩展程序是指在创建给定类型的每个分块时,在该分块上运行的函数。例如,它们可以添加自定义配置(例如设置块的提示)或自定义行为(例如向块添加事件监听器)。

// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
    'parent_tooltip_extension',
    function() { // this refers to the block that the extension is being run on
      var thisBlock = this;
      this.setTooltip(function() {
        var parent = thisBlock.getParent();
        return (parent && parent.getInputsInline() && parent.tooltip) ||
            Blockly.Msg['MATH_NUMBER_TOOLTIP'];
      });
    });

扩展程序必须“注册”,才能与字符串键相关联。然后,您可以将此字符串键分配给代码块类型的 JSON 定义extensions 属性,以将扩展程序应用于代码块。

{
 //...,
 "extensions": ["parent_tooltip_extension",]
}

您还可以一次添加多个扩展程序。请注意,extensions 属性必须为数组,即使您只应用一个扩展程序也是如此。

{
  //...,
  "extensions": ["parent_tooltip_extension", "break_warning_extension"],
}

Mixin

如果您想向某个代码块添加一些属性/辅助函数,但不立即运行它们,Blockly 还提供了一种便捷的方法。具体方法是,您可以注册一个包含所有其他属性/方法的 mixin 对象。然后,将混入对象封装在一个函数中,该函数会在每次创建给定块类型的实例时应用混入。

Blockly.Extensions.registerMixin('my_mixin', {
  someProperty: 'a cool value',

  someMethod: function() {
    // Do something cool!
  }
))`

与混合项关联的字符串键可在 JSON 中引用,就像任何其他扩展程序一样。

{
 //...,
 "extensions": ["my_mixin"],
}