الإضافات والعناصر المختلطة

الإضافات هي دوالّ يتم تنفيذها على كتلة أثناء الإعداد. وغالبًا ما تضيف هذه العناصر بعض الإعدادات أو السلوك المخصّص إلى أحد الأقسام. تسمح لك العناصر المختلطة بإضافة خصائص أو دوال مساعدة إلى أيّ عنصر، ولكن لا يتمّ تشغيلها على الفور.

ما عليك سوى استخدام الإضافات أو العناصر المختلطة عند تحديد قالب باستخدام تنسيق 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 أيضًا طريقة سهلة للحالات التي تريد فيها إضافة بعض الخصائص أو الدوالّ المساعِدة إلى أحد الكتل، ولكن بدون تشغيلها على الفور. ويعمل هذا الإجراء من خلال السماح لك بتسجيل عنصر mixin يحتوي على جميع السمات/الطرق الإضافية. بعد ذلك، يتم لفّ كائن المزيج في دالة تطبِّق المزيج في كل مرة يتم فيها إنشاء مثيل لنوع المربّع المحدّد.

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

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

يمكن الإشارة إلى مفاتيح السلاسل المرتبطة بالعناصر المختلطة في ملف JSON تمامًا مثل أي ملف إضافي آخر.

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