לסמלים מסוימים יש מצב שצריך לשמור, בעוד שאחרים נוצרים באופן אוטומטי על סמך המצב הקיים. לדוגמה, סמלי התגובות צריכים לשמור את הטקסט שלהם, וסמלי אזהרה לא נוצרים כי הם נוצרים על סמך האופן שבו מחובר.
אם הסמל צריך לשמור את מצבו, עליכם להטמיע את
ISerializable
ולרשום את
.
המדינה שהסמל שלך מחזיר כלולה בנכס icons
של
מצב הבלוק:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
שמירת המדינה
כדי לשמור את מצב הסמל, צריך להטמיע את
saveState
של ה-method ISerializable
גרפי. השיטה הזו יכולה להחזיר קובץ JSON שרירותי, שמועבר אל
אמצעי תשלום אחד (loadState
).
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
סריאליזציה וגיבוי של נתונים
הפרמטר saveState
מקבל גם פרמטר doFullSerialization
אופציונלי. הדבר
משמש בסמלים שמפנים למצב שעבר סריאליזציה
serializer (כמו מודלים של נתוני גיבוי). הפרמטר מאותת
המצב שאליו מפנה הבלוק לא יהיה זמין אחרי השמטה של הבלוקים, כך
הסמל צריך להציג סריאליזציה של כל מצב הגיבוי עצמו. לדוגמה, המשפט נכון
כשבלוק מסוים עובר סריאליזציה, או כאשר מעתיקים בלוק ומדביקים אותו.
הנה שני תרחישים נפוצים לדוגמה:
- כשבלוק ספציפי נטען לסביבת עבודה שבה נתוני הגיבוי נטענים לא קיים, לסמל יש מספיק מידע במצב שלו יוצרים מודל נתונים חדש.
- כשמתבצעת העתקה והדבקה של בלוק, הסמל תמיד יוצר גיבוי חדש ולא להתייחס למודל קיים.
מצב טעינה
כדי לשמור את מצב הסמל, צריך להטמיע את
loadState
של ה-method ISerializable
גרפי. השיטה הזו מקבלת את ה-JSON שמוחזר על ידי ה-method 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);