कस्टम प्रोसेस के लिए डेटा मॉडल बनाना

प्रोसीजर, रेफ़रंस के तौर पर इस्तेमाल किए गए उन सभी डेटा मॉडल को ब्लॉक करती है जो प्रोसीजर के सिग्नेचर (नाम, पैरामीटर, और रिटर्न) को तय करते हैं. @blockly/block-shareable-procedures प्लगिन से मिले डेटा मॉडल, Blockly के लेगसी बिल्ट-इन प्रोसीज़र ब्लॉक के व्यवहार को दोहराने के लिए बनाए गए हैं.

इसमें कुछ ऐसे व्यवहार शामिल हैं जो शायद आपको कस्टम प्रोसीज़र ब्लॉक के लिए नहीं चाहिए. जैसे:

  • सामान लौटाने के टाइप काम नहीं करते
  • सभी पैरामीटर, ग्लोबल वैरिएबल से जुड़े होते हैं

अगर आपको अलग-अलग व्यवहार चाहिए, तो अपने हिसाब से कस्टम प्रोसीज़र डेटा मॉडल बनाए जा सकते हैं.

प्रोसीजर मॉडल लागू करना

आपके प्रोसीजर डेटा मॉडल को IProcedureModel इंटरफ़ेस लागू करना होगा.

class MyProcedureModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;

    // Note: construction should not add the model to the procedure map.
  },

  // Other methods are omitted for brevity...
}

पैरामीटर मॉडल लागू करना

आपके पैरामीटर डेटा मॉडल में IParameterModel इंटरफ़ेस लागू होना चाहिए.

class MyParameterModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;
  },

  setProcedureModel(model) {
    this.model =  model;
    return this;
  }

  // Other methods are omitted for brevity...
}

ट्रिगर में बदलाव

प्रोसीजर मॉडल में बदलाव करने वाले किसी भी तरीके को, @blockly/block-shareable-procedures प्लगिन से triggerProceduresUpdate को भी कॉल करना चाहिए. इससे किसी भी प्रोसीज़र ब्लॉक पर doProcedureUpdate कॉल किया जाएगा. इससे वे फिर से रेंडर हो जाएंगे.

import {triggerProceduresUpdate} from '@blockly/block-shareable-procedures';

class MyProcedureModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

इवेंट

@blockly/block-shareable-procedures प्लगिन में मौजूद प्रोसीज़र मॉडल भी, प्रोसीज़र में बदलाव होने पर इवेंट ट्रिगर करते हैं. इससे कई वर्कस्पेस को सिंक किया जा सकता है. साथ ही, प्रोसीजर मॉडल को उनके साथ शेयर किया जा सकता है. अगर चाहें, तो इवेंट ट्रिगर करने का विकल्प भी चुना जा सकता है.

डिसिरियलाइज़ेशन

आपकी हर क्लास में, डिसिरियलाइज़ेशन की सुविधा के लिए static loadState तरीका भी होना चाहिए.

class MyProcedureModel {
  static loadState(state, workspace) {
    // Note that the procedure model should not deserialize parameters.
    // The deserializer will handle that.
    return new MyProcedureModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  static loadState(state, workspace) {
    return new MyParameterModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}