कुछ आइकॉन में ऐसी स्थिति होती है जिसे सेव करने की ज़रूरत होती है, जबकि दूसरे आइकॉन मौजूदा स्थिति के आधार पर इंस्टैंशिएट होते हैं. उदाहरण के लिए, टिप्पणी आइकॉन को अपना टेक्स्ट सेव करना होता है, जबकि चेतावनी वाले आइकॉन नहीं सेव करते, क्योंकि उन्हें इस आधार पर इंस्टैंशिएट किया जाता है कि ब्लॉक कैसे जुड़े हैं.
अगर आपके आइकॉन को अपनी स्थिति सेव करनी है, तो आपको ISerializable
इंटरफ़ेस लागू करना होगा और अपना आइकॉन register होगा.
आपके आइकॉन से मिली स्थिति, आपके ब्लॉक की स्थिति की 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);