कस्टम ब्लॉक: ब्लॉक पैरामीटर

ऐप्लिकेशन डिज़ाइन करते समय, उसे कई तरह के मॉडल में से चुना जा सकता है जो Blockly का इस्तेमाल करता है. इन विकल्पों को ध्यान में रखना चाहिए क्योंकि वे उन ब्लॉक पर असर डालते हैं जिनकी उपयोगकर्ता को ज़रूरत होगी.

कॉन्फ़िगरेशन

कॉन्फ़िगरेशन का वर्णन करने के लिए, इसके बजाय कई Blockly ऐप्लिकेशन का इस्तेमाल किया जाता है बहुत काम की है. कॉन्फ़िगरेशन ऐप्लिकेशन आम तौर पर इससे शुरू होते हैं: तो फ़ाइल फ़ोल्डर पर एक रूट लेवल ब्लॉक शुरू कर रहे हैं. एक अच्छा उदाहरण है Blockly Developer Tools का ब्लॉक फ़ैक्ट्री टैब:

Blockly.Blocks['factory_base'] = {
  init: function() {
    this.setDeletable(false);
    this.setMovable(false);
    this.setEditable(false);
    // etc...
  }
}

Blockly.serialization.blocks.append({'type': 'factory_base'}, workspace);

इससे एक ऐसा ब्लॉक बन जाता है जिसे किसी दूसरी जगह नहीं ले जाया जा सकता और जिसमें सभी उपयोगकर्ता का कॉन्फ़िगरेशन. फ़ाइल फ़ोल्डर को किसी भी समय क्रम से लगाया जा सकता है .

ऐसा हो सकता है कि ऐसे ऐप्लिकेशन किसी भी ब्लॉक को अपने आप बंद करना चाहें, जो कि रूट ब्लॉक से कनेक्ट होता है. ऐसा सिर्फ़ एक लाइन में किया जा सकता है:

workspace.addChangeListener(Blockly.Events.disableOrphans);

सीरियल प्रोग्राम

Blockly के ज़्यादातर ऐप्लिकेशन, सीरियल नंबर बनाने के लिए बनाए जाते हैं प्रोग्राम में शामिल हो. उपयोगकर्ता, क्रम से लागू किए जाने वाले ब्लॉक को एक साथ स्टैक करते हैं.

वर्कस्पेस पर मौजूद हर (गैर-बंद है) ब्लॉक, कार्यक्रम. अगर ब्लॉक के एक से ज़्यादा स्टैक हैं, तो बड़े ब्लॉक पहले एक्ज़ीक्यूट किया जाता है. (अगर दो स्टैक की ऊंचाई करीब-करीब बराबर है, बाईं ओर दिए गए स्टैक (आरटीएल मोड में दाएं) को प्राथमिकता दी जाती है.

फ़ाइल फ़ोल्डर को किसी भी समय एक्ज़ीक्यूटेबल कोड में एक्सपोर्ट किया जा सकता है. यह कोड को JavaScript में क्लाइंट साइड पर चलाया जा सकता है (eval या JS का इस्तेमाल करके) इंटरप्रेटर) या सर्वर साइड का इस्तेमाल किसी भी भाषा में किया जा सकता है.

import {javascriptGenerator} from 'blockly/javascript';

var code = javascriptGenerator.workspaceToCode(workspace);

पैरलल प्रोग्राम

कुछ Blockly ऐप्लिकेशन, ब्लॉक के सभी स्टैक को एक्ज़ीक्यूट करने का विकल्प चुनते हैं साथ ही साथ समानांतर रूप से, न कि क्रम से. उदाहरण के लिए, संगीत ऐप्लिकेशन इसमें ड्रम लूप, धुन के साथ-साथ चलता है.

पैरलल एक्ज़ीक्यूशन को लागू करने का एक तरीका यह है कि आप हर अलग-अलग ब्लॉक करें:

import {javascriptGenerator} from 'blockly/javascript';

var json = Blockly.serialization.workspaces.save(workspace);

// Store top blocks separately, and remove them from the JSON.
var blocks = json['blocks']['blocks'];
var topBlocks = blocks.slice();  // Create shallow copy.
blocks.length = 0;

// Load each block into the workspace individually and generate code.
var allCode = [];
var headless = new Blockly.Workspace();
for (var i = 0; block < topBlocks.length; i++) {
  var block = topBlocks[i];
  blocks.push(block);
  Blockly.serialization.workspaces.load(json, headless);
  allCode.push(javascriptGenerator.workspaceToCode(headless));
  blocks.length = 0;
}

अगर टारगेट भाषा JavaScript है, तो allCode कलेक्शन यह हो सकता है इसका इस्तेमाल, कई JS इंटरप्रिटर बनाने में किया जाता है, ताकि उन्हें एक साथ प्रोसेस किया जा सके. अगर आपने टारगेट की गई भाषा Python जैसा कुछ है. इसके बाद, allCode अरे उसे एक ऐसे प्रोग्राम में जोड़ा जा सकता है जो थ्रेडिंग मॉड्यूल का इस्तेमाल करता है.

किसी भी दूसरे प्रोग्राम की तरह, अगर आपको फ़ैसला लेना है कि शेयर किए गए संसाधन, जैसे कि वैरिएबल और फ़ंक्शन.

इवेंट-ड्रिवन प्रोग्राम

इवेंट हैंडलर सिर्फ़ ऐसे फ़ंक्शन हैं जिन्हें सिस्टम कॉल करता है कम से कम खर्च हो. ये ब्लॉक या तो इस्तेमाल किए जाने वाले ब्लॉक या वे हेडर हो सकते हैं जो किसी स्टैक पर सबसे ऊपर हों ब्लॉक की गई हैं.

कुछ डेवलपर 'हैट' जोड़ना पसंद करते हैं तो उसे इवेंट ब्लॉक में सबसे ऊपर रखा जा सकता है. वे अन्य ब्लॉक से अलग दिखते हैं. यह इसके लिए डिफ़ॉल्ट रूप नहीं है ब्लॉकली, लेकिन रेंडरर कॉन्स्टेंट को ओवरराइड करके इसे जोड़ा जा सकता है ADD_START_HATS से true (कस्टम रेंडरर कोडलैब - कॉन्स्टेंट बदलें). या फिर कोई थीम जोड़कर और ब्लॉक स्टाइल पर हैट का विकल्प सेट करके. ज़्यादा देखें यहां थीम के हिस्से के तौर पर, ब्लॉक पर हैट सेट करने की जानकारी पाई जा सकती है यहां पढ़ें.

इवेंट-ड्रिवन मॉडल के अंदर, एक हैंडलर बनाना भी एक सही विकल्प हो सकता है को भी शामिल किया जा सकता है. इस मॉडल के तहत, फ़ाइल फ़ोल्डर का कोई भी ब्लॉक किसी इवेंट हैंडलर से कनेक्ट किए गए इवेंट को अनदेखा कर दिया जाएगा और वह लागू नहीं होगा.

इवेंट का इस्तेमाल करने वाला सिस्टम डिज़ाइन करते समय, इस बात पर ध्यान दें कि एक ही इवेंट के एक से ज़्यादा इंस्टेंस के साथ काम करने के लिए डिज़ाइन किया गया हो या ऐसा करना ज़रूरी हो हैंडलर.