بعض الرموز لها حالة يجب حفظها، بينما يتم إنشاء مثيل البعض الآخر بناءً على الحالة الحالية. على سبيل المثال، تحتاج أيقونات التعليقات إلى حفظ النص بينما لا يحدث ذلك لأن رموز التحذير يتم إنشاء مثيلها بناءً على كيفية إنشاء متصلين.
إذا كان الرمز بحاجة إلى حفظ حالته، عليك تنفيذ
ISerializable
وتسجيل
.
يتم تضمين الحالة التي يعرضها الرمز في السمة icons
في
حالة الكتلة:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
حفظ الحالة
لحفظ حالة الرمز، عليك تنفيذ
طريقة saveState
من ISerializable
من واجهة pyplot. ويمكن لهذه الطريقة عرض ملف json عشوائي يتم تمريره إلى
طريقة loadState
.
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
التسلسل الكامل والبيانات الاحتياطية
تتلقّى saveState
أيضًا مَعلمة doFullSerialization
اختيارية. هذا هو
تستخدمها الرموز التي تشير إلى حالة تسلسلية بواسطة
serializer (مثل النسخ الاحتياطي لنماذج البيانات). تشير المعلمة إلى أن
ولن تتوفر الحالة المشار إليها عند إلغاء تسلسل الحظر، وبالتالي
تسلسلاً لكل حالة الدعم نفسها. على سبيل المثال، هذا صحيح
عند تنفيذ جزء من العنصر بشكل تسلسلي أو عند نسخ الجزء ولصقه.
في ما يلي حالتا استخدام شائعتان لذلك:
- عند تحميل وحدة فردية في مساحة عمل يتم فيها تحميل البيانات الاحتياطية غير موجود، فهذا يعني أن الرمز يحتوي على معلومات كافية بحالته الخاصة لإنشاء نموذج بيانات جديد.
- عندما يتم نسخ الكتلة ولصقها، ينشئ الرمز دائمًا خلفية جديدة نموذج بيانات بدلاً من الإشارة إلى نموذج حالي.
حالة التحميل
لحفظ حالة الرمز، عليك تنفيذ
طريقة loadState
من ISerializable
من واجهة pyplot. تستخدم هذه الطريقة ملف JSON الذي تعرضه طريقة saveState
.
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);