שמירה וטעינה של סמלים

לסמלים מסוימים יש מצב שצריך לשמור, בעוד שאחרים נוצרים באופן אוטומטי על סמך המצב הקיים. לדוגמה, סמלי התגובות צריכים לשמור את הטקסט שלהם, וסמלי אזהרה לא נוצרים כי הם נוצרים על סמך האופן שבו מחובר.

אם הסמל צריך לשמור את מצבו, עליכם להטמיע את 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);