اکستنشن ها و میکسین ها

برنامه های افزودنی توابعی هستند که در طول مقداردهی اولیه روی یک بلوک اجرا می شوند. اینها اغلب پیکربندی یا رفتار سفارشی را به یک بلوک اضافه می کنند. Mixins به شما اجازه می دهد تا ویژگی ها یا توابع کمکی را به یک بلوک اضافه کنید، اما آنها را بلافاصله اجرا نکنید.

زمانی که بلاکی را با JSON تعریف می‌کنید، فقط باید از افزونه‌ها یا میکس‌ها استفاده کنید. اگر از جاوا اسکریپت برای تعریف یک بلوک استفاده می‌کنید، می‌توانید توابع اولیه را مستقیماً در 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 همچنین یک روش راحت برای موقعیت‌هایی ارائه می‌کند که می‌خواهید برخی از ویژگی‌ها/توابع کمکی را به یک بلوک اضافه کنید، اما بلافاصله آنها را اجرا نکنید. این کار به شما امکان می دهد یک شی mixin را ثبت کنید که حاوی تمام ویژگی ها/روش های اضافی شما باشد. سپس شی mixin در تابعی پیچیده می شود که هر بار که نمونه ای از نوع بلوک داده شده ایجاد می شود، mixin را اعمال می کند.

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

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

کلیدهای رشته ای مرتبط با میکسین ها را می توان در JSON مانند هر برنامه افزودنی دیگر ارجاع داد.

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