Extensiones y mixins

Las extensiones son funciones que se ejecutan en un bloque durante la inicialización. A menudo, agregan algún comportamiento o configuración personalizados a un bloque. Los mixins te permiten agregar propiedades o funciones auxiliares a un bloque, pero no ejecutarlas de inmediato.

Solo debes usar extensiones o mixins cuando defines un bloque con JSON. Si usas JavaScript para definir un bloque, puedes llamar a las funciones de inicialización directamente en init y agregar métodos o propiedades directamente a la definición.

Extensiones

Las extensiones son funciones que se ejecutan en cada bloque de un tipo determinado a medida que se crea el bloque. Por ejemplo, pueden agregar configuración personalizada (p.ej., establecer la información sobre herramientas del bloque) o comportamiento personalizado (p.ej., agregar un objeto de escucha de eventos al bloque).

// 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'];
      });
    });

Las extensiones deben estar "registradas" para que se puedan asociar con una clave de cadena. Luego, puedes asignar esta clave de cadena a la propiedad extensions de la definición JSON de tu tipo de bloque para aplicar la extensión al bloque.

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

También puedes agregar varias extensiones a la vez. Ten en cuenta que la propiedad extensions debe ser un array, incluso si solo aplicas una extensión.

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

Mixins

Blockly también proporciona un método conveniente para situaciones en las que deseas agregar algunas propiedades o funciones auxiliares a un bloque, pero no ejecutarlas de inmediato. Esto funciona permitiéndote registrar un objeto mixin que contiene todas tus propiedades o métodos adicionales. Luego, el objeto de mixin se une en una función que aplica el mixin cada vez que se crea una instancia del tipo de bloque determinado.

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

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

Se puede hacer referencia a las claves de cadena asociadas con los mixins en JSON como a cualquier otra extensión.

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