Расширения и миксины

Расширения — это функции, которые запускаются в блоке во время инициализации. Они часто добавляют к блоку некоторую пользовательскую конфигурацию или поведение . Миксины позволяют добавлять к блоку свойства или вспомогательные функции, но не запускать их немедленно.

Вам нужно использовать расширения или примеси только тогда, когда вы определяете блок с помощью 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'];
      });
    });

Расширения должны быть «зарегистрированы», чтобы их можно было связать со строковым ключом. Затем вы можете назначить этот строковый ключ свойству extensions определения JSON вашего типа блока, чтобы применить расширение к блоку.

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

Вы также можете добавить несколько расширений одновременно. Обратите внимание, что свойство extensions должно быть массивом, даже если вы применяете только одно расширение.

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

Миксины

Blockly также предоставляет удобный метод для ситуаций, когда вы хотите добавить в блок некоторые свойства/вспомогательные функции, но не запускать их немедленно. Это работает, позволяя вам зарегистрировать объект примеси , который содержит все ваши дополнительные свойства/методы. Затем объект примеси оборачивается функцией, которая применяет примесь каждый раз, когда создается экземпляр данного типа блока.

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

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

На строковые ключи, связанные с миксинами, можно ссылаться в JSON, как и на любое другое расширение.

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