आइकॉन सेव करें और लोड करें

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

अगर आपको अपने आइकॉन की स्थिति सेव करनी है, तो आपको ISerializable इंटरफ़ेस और रजिस्टर करें आइकन.

आपके आइकॉन से मिलने वाला राज्य, आपकी icons प्रॉपर्टी में शामिल हो जाता है ब्लॉक की स्थिति:

{
  'blocks': {
    'languageVersion': 0,
    'blocks': [
      {
        'type': 'my_block',
        'icons': {
          // Your state goes here!
          'my_icon': 'some state',
        }
      }
    ]
  }
}

'सेव करें' स्थिति

अपने आइकॉन की स्थिति सेव करने के लिए, आपको ISerializable में से saveState तरीका इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. इस तरीके से आर्बिट्रेरी JSON वापस मिल सकता है, जो आपके loadState तरीका.

saveState() {
  return this.state;  // Some arbirtary JSON-compatible data.
}

पूरा सीरियलाइज़ेशन और बैकिंग डेटा

saveState को एक doFullSerialization पैरामीटर भी मिलता है. हालांकि, ऐसा करना ज़रूरी नहीं है. यह है का इस्तेमाल उन आइकॉन के लिए किया जाता है जो किसी दूसरे सीरियलाइज़र (जैसे, बैकिंग डेटा मॉडल) ऐसे पैरामीटर सिग्नल जो ब्लॉक को डीसीरियलाइज़ (पार्स) करने पर, रेफ़रेंस स्थिति उपलब्ध नहीं होगी, इसलिए आइकन में सभी बैकिंग स्टेट को सीरियल के रूप में लिखा जाना चाहिए. उदाहरण के लिए, यह सही है जब किसी एक ब्लॉक को क्रम से लगाया जाता है या जब किसी ब्लॉक को कॉपी करके चिपकाया जाता है.

इसके लिए इस्तेमाल के दो सामान्य उदाहरण हैं:

  • जब किसी एक ब्लॉक को ऐसे फ़ाइल फ़ोल्डर में लोड किया जाता है जिसमें बैकिंग डेटा मॉडल मौजूद नहीं है, तो आइकॉन में नया डेटा मॉडल बनाएं.
  • जब किसी ब्लॉक को कॉपी करके चिपकाया जाता है, तब आइकॉन हमेशा नई बैकिंग बनाता है डेटा मॉडल का उपयोग करें.

लोड होने की स्थिति

अपने आइकॉन की स्थिति सेव करने के लिए, आपको ISerializable में से loadState तरीका इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. यह तरीका, आपके saveState वाले तरीके से मिले JSON को कैप्चर करता है.

loadState(state) {
  this.state = state;
}

आइकॉन क्लास रजिस्टर करें

आखिर में आपको अपना आइकॉन रजिस्टर करना होगा, ताकि क्रम से लगाने वाला सिस्टम इंस्टैंशिएट करें. याद रखें कि IconType का इस्तेमाल करके, आइकन में वही स्ट्रिंग होनी चाहिए जो इसके getType तरीका.

class myIcon extends Blockly.icons.Icon {
  getType() {
    return new Blockly.icons.IconType('my_icon');
  }
}

Blockly.icons.registry.register(
    new Blockly.icons.IconType('my_icon'), myIcon);