מהי הגדרת בלוק?

הגדרת בלוק היא אובייקט שמגדיר בלוק מותאם אישית. לדוגמה, הוא מגדיר את המראה והתחושה של הבלוק (טקסט, שדות, חיבורים, צבע וכו'), וגם את ההתנהגות שלו (handler של אירועים ברמת הבלוק וכו').

לדוגמה, הבלוק הזה:

בלוק `string_length`.

אפשר להגדיר אותם ב-JSON או ב-JavaScript באופן הבא:

JSON

Blockly.common.defineBlocksWithJsonArray([{
  "type": "string_length",
  "message0": 'length of %1',
  "args0": [
    {
      "type": "input_value",
      "name": "VALUE",
      "check": "String"
    }
  ],
  "output": "Number",
  "colour": 160,
  "tooltip": "Returns number of letters in the provided text.",
  "helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
}]);

defineBlocksWithJsonArray יוצר הגדרת בלוק מאובייקט JSON.

JavaScript

Blockly.Blocks['string_length'] = {
   init: function() {
     this.appendValueInput('VALUE')
         .setCheck('String')
         .appendField('length of');
     this.setOutput(true, 'Number');
     this.setColour(160);
     this.setTooltip('Returns number of letters in the provided text.');
     this.setHelpUrl('http://www.w3schools.com/jsref/jsref_length_string.asp');
   }
};

כשמשתמשים ב-JavaScript, יוצרים את הגדרת הבלוק ישירות.

איך פועלות הגדרות החסימה

הגדרת בלוק היא mixin שמכיל מאפיינים עם ערכי פונקציות. כשיוצרים מופע חדש של בלוק, המאפיינים האלה מועתקים לאובייקט הבלוק שנוצר. ‫Blockly קורא לפונקציות האלה כדי להפעיל התנהגות מותאמת אישית.

כי פונקציות ההגדרה מעורבבות באובייקט הבלוק:

  • מילת המפתח this בפונקציות הגדרה מתייחסת לאובייקט הבלוק. כלומר, אפשר להשתמש בו כדי לגשת לשיטות ולמאפיינים הציבוריים במחלקה Block (או BlockSvg).

‫Blockly מגדיר מספר קטן של פונקציות שאפשר להשתמש בהן כדי להתאים אישית בלוקים. הפונקציה הנפוצה ביותר היא init, ש-Blockly קוראת לה כדי לאתחל בלוק, והיא משמשת להגדרת המראה והתחושה של הבלוק. רשימה מלאה של מאפיינים עם ערכי פונקציות מופיעה במחלקות Block ו-BlockSvg. המאפיינים האלה יוצרים למעשה ממשק להטמעה של הגדרות חסימה. כולם אופציונליים.

הגדרות של בלוקים יכולות לכלול גם פונקציות בהתאמה אישית, אבל Blockly לא יקרא לפונקציות האלה ישירות. במקום זאת, אפשר להשתמש בהם כדי להטמיע פונקציות אחרות. לדוגמה, handler של אירוע ברמת הבלוק (המאפיין Block.onchange) יכול להקצות אירועים שונים לפונקציות מותאמות אישית שונות.

איך יוצרים הגדרות של חסימות

יש כמה דרכים ליצור הגדרות של בלוקים:

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