ब्लॉक डेफ़िनिशन एक ऐसा ऑब्जेक्ट है जो कस्टम ब्लॉक की जानकारी देता है. उदाहरण के लिए, यह ब्लॉक के लुक और स्टाइल (टेक्स्ट, फ़ील्ड, कनेक्शन, रंग वगैरह) के साथ-साथ उसके व्यवहार (ब्लॉक-लेवल इवेंट हैंडलर वगैरह) को तय करता है.
उदाहरण के लिए, यह ब्लॉक:
को 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 का इस्तेमाल करने पर, ब्लॉक की परिभाषा सीधे तौर पर बनाई जाती है.
ब्लॉक की परिभाषाएं कैसे काम करती हैं
ब्लॉक की परिभाषा, एक मिक्सिन है, जिसमें फ़ंक्शन की वैल्यू वाली प्रॉपर्टी होती हैं. जब कोई नया ब्लॉक इंस्टैंशिएट किया जाता है, तो इन प्रॉपर्टी को नए बनाए गए ब्लॉक ऑब्जेक्ट में कॉपी कर दिया जाता है. Blockly, कस्टम व्यवहार को लागू करने के लिए इन फ़ंक्शन को कॉल करता है.
ऐसा इसलिए है, क्योंकि परिभाषा फ़ंक्शन, ब्लॉक ऑब्जेक्ट में शामिल होते हैं:
- डेफ़िनिशन फ़ंक्शन में
this
कीवर्ड, ब्लॉक ऑब्जेक्ट को रेफ़र करता है. इसका मतलब है कि इसका इस्तेमाल,Block
(याBlockSvg
) क्लास में मौजूद सार्वजनिक मेथड और प्रॉपर्टी को ऐक्सेस करने के लिए किया जा सकता है.
Blockly में कुछ फ़ंक्शन होते हैं जिनका इस्तेमाल करके, ब्लॉक को अपनी पसंद के मुताबिक बनाया जा सकता है. इनमें से सबसे सामान्य init
है. Blockly, ब्लॉक को शुरू करने के लिए इसे कॉल करता है. साथ ही, इसका इस्तेमाल ब्लॉक के लुक और स्टाइल को तय करने के लिए किया जाता है. पूरी सूची के लिए, Block
और BlockSvg
क्लास में, फ़ंक्शन-वैल्यू वाली प्रॉपर्टी देखें.
ये प्रॉपर्टी, ब्लॉक डेफ़िनिशन को लागू करने के लिए एक इंटरफ़ेस बनाती हैं. हालांकि, इनमें से किसी भी प्रॉपर्टी का इस्तेमाल करना ज़रूरी नहीं है.
ब्लॉक डेफ़िनिशन में कस्टम फ़ंक्शन भी हो सकते हैं. हालांकि, Blockly इन फ़ंक्शन को सीधे तौर पर कॉल नहीं करेगा. इसके बजाय, इनका इस्तेमाल अन्य फ़ंक्शन लागू करने के लिए किया जा सकता है. उदाहरण के लिए, ब्लॉक-लेवल इवेंट हैंडलर (Block.onchange
प्रॉपर्टी) अलग-अलग कस्टम फ़ंक्शन को अलग-अलग इवेंट सौंप सकता है.
ब्लॉक की परिभाषाएं बनाने का तरीका
ब्लॉक डेफ़िनिशन बनाने के कई तरीके हैं:
- अपने ब्लॉक के लुक और स्टाइल को तय करने के लिए, Blockly डेवलपर टूल का इस्तेमाल करें. जनरेट किए गए JSON या JavaScript को अपने कोड में कॉपी करें और ज़रूरत के हिसाब से कस्टम कोड जोड़ें. ज़्यादा जानकारी के लिए, Blockly के डेवलपर टूल देखें.
- मिलता-जुलता ब्लॉक ढूंढें, उसकी परिभाषा कॉपी करें, और ज़रूरत के हिसाब से उसमें बदलाव करें. ज़्यादा जानकारी के लिए, मौजूदा परिभाषाओं में बदलाव करना लेख पढ़ें.
- ब्लॉक की परिभाषा को हाथ से लिखें. ज़्यादा जानकारी के लिए, JSON और JavaScript देखें.