תוספים ו-mixins

תוספים הם פונקציות שפועלות בבלוק במהלך האינטוליזציה. בדרך כלל, הן מוסיפות הגדרה או התנהגות בהתאמה אישית לבלוק. Mixins מאפשרים להוסיף מאפיינים או פונקציות עזר לבלוק, אבל לא להריץ אותם באופן מיידי.

צריך להשתמש בתוספים או ב-mixins רק כשמגדירים בלוק באמצעות 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"],
}

Mixins

ב-Blockly יש גם שיטה נוחה למקרים שבהם רוצים להוסיף לבלוק תכונות או פונקציות עזר מסוימות, אבל לא להריץ אותן באופן מיידי. כדי לעשות זאת, צריך לרשום אובייקט mixin שמכיל את כל המאפיינים או השיטות הנוספים. לאחר מכן, אובייקט ה-mixin עוטף בפונקציה שמפעילה את ה-mixin בכל פעם שנוצרת מופע של סוג הבלוק הנתון.

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

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

אפשר להפנות למפתחות מחרוזת שמשויכים ל-mixins ב-JSON כמו לכל תוסף אחר.

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