تعریف بلوک ، شیئی است که یک بلوک سفارشی را تعریف میکند. برای مثال، ظاهر و نحوه نمایش بلوک (متن، فیلدها، اتصالات، رنگ و غیره) و همچنین رفتار آن (کنترلکننده رویداد سطح بلوک و غیره) را تعریف میکند.
برای مثال، این بلوک:

را میتوان در 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 ایجاد میکند.
جاوا اسکریپت
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');
}
};
وقتی از جاوا اسکریپت استفاده میکنید، تعریف بلوک را مستقیماً ایجاد میکنید.
نحوه عملکرد تعاریف بلوک
تعریف بلوک، یک ترکیب (mixin) است که شامل ویژگیهایی با مقدار تابع است. وقتی یک بلوک جدید نمونهسازی میشود، این ویژگیها به شیء بلوک تازه ایجاد شده کپی میشوند. Blockly این توابع را برای فراخوانی رفتار سفارشی فراخوانی میکند.
زیرا توابع تعریف با شیء بلوک ترکیب شدهاند:
- کلمه کلیدی
thisدر توابع تعریفی به شیء block اشاره دارد. یعنی میتوان از آن برای دسترسی به متدها و ویژگیهای عمومی در کلاسBlock(یاBlockSvg) استفاده کرد.
Blockly تعداد کمی از توابع را تعریف میکند که میتوانید برای سفارشیسازی بلوکها از آنها استفاده کنید. رایجترین آنها init است که Blockly برای مقداردهی اولیه یک بلوک فراخوانی میکند و برای تعریف ظاهر و حس بلوک استفاده میشود. برای مشاهده لیست کامل، به ویژگیهای دارای مقدار تابع در کلاسهای Block و BlockSvg مراجعه کنید. این ویژگیها عملاً رابطی را برای پیادهسازی تعاریف بلوک تشکیل میدهند. همه آنها اختیاری هستند.
تعاریف بلوک همچنین میتوانند توابع سفارشی داشته باشند، اگرچه Blockly این توابع را مستقیماً فراخوانی نمیکند. در عوض، میتوان از آنها برای پیادهسازی توابع دیگر استفاده کرد. به عنوان مثال، یک کنترلکننده رویداد سطح بلوک (خاصیت Block.onchange ) میتواند رویدادهای مختلف را به توابع سفارشی مختلف واگذار کند.
نحوه ایجاد تعاریف بلوک
چندین روش مختلف برای ایجاد تعاریف بلوک وجود دارد:
- از ابزارهای توسعهدهنده Blockly برای تعریف ظاهر و حس بلوک خود استفاده کنید. JSON یا جاوا اسکریپت تولید شده را در کد خود کپی کنید و در صورت نیاز کد سفارشی اضافه کنید. برای اطلاعات بیشتر، به ابزارهای توسعهدهنده Blockly مراجعه کنید.
- یک بلوک مشابه پیدا کنید، تعریف آن را کپی کنید و در صورت نیاز آن را تغییر دهید. برای اطلاعات بیشتر، به «اصلاح تعاریف موجود» مراجعه کنید.
- تعریف بلوک را به صورت دستی بنویسید. برای اطلاعات بیشتر، به JSON و JavaScript مراجعه کنید.