কিছু আইকনের অবস্থা আছে যা সংরক্ষণ করা প্রয়োজন, অন্যগুলি বিদ্যমান অবস্থার উপর ভিত্তি করে তাত্ক্ষণিক করা হয়। উদাহরণস্বরূপ, মন্তব্য আইকনগুলিকে তাদের পাঠ্য সংরক্ষণ করতে হবে, সতর্কীকরণ আইকনগুলি এমন নয় কারণ সেগুলি ব্লকগুলি কীভাবে সংযুক্ত রয়েছে তার উপর ভিত্তি করে তাত্ক্ষণিক করা হয়৷
আপনার আইকনটির অবস্থা সংরক্ষণ করতে হলে, আপনাকে 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);