ذخیره و بارگیری نمادها

برخی از نمادها دارای حالتی هستند که باید ذخیره شوند، در حالی که برخی دیگر بر اساس وضعیت موجود نمونه سازی می شوند. به عنوان مثال، نمادهای نظر باید متن خود را ذخیره کنند، در حالی که نمادهای اخطار این کار را انجام نمی دهند زیرا بر اساس نحوه اتصال بلوک ها نمونه سازی می شوند.

اگر نماد شما باید حالت خود را ذخیره کند، باید رابط ISerializable را پیاده سازی کنید و نماد خود را ثبت کنید .

حالتی که توسط نماد شما برگردانده می شود در ویژگی icons حالت بلوک شما قرار می گیرد:

{
  'blocks': {
    'languageVersion': 0,
    'blocks': [
      {
        'type': 'my_block',
        'icons': {
          // Your state goes here!
          'my_icon': 'some state',
        }
      }
    ]
  }
}

ذخیره حالت

برای ذخیره وضعیت آیکون خود، باید متد saveState رابط ISerializable را پیاده سازی کنید. این متد می تواند json دلخواه را برگرداند که به متد loadState شما ارسال می شود.

saveState() {
  return this.state;  // Some arbirtary JSON-compatible data.
}

سریال سازی کامل و داده های پشتیبان

saveState همچنین یک پارامتر اختیاری doFullSerialization دریافت می کند. این مورد توسط نمادهایی استفاده می‌شود که به‌وسیله یک سریال‌ساز متفاوت (مانند مدل‌های داده پشتیبان) مرتب شده‌اند. این پارامتر نشان می دهد که حالت ارجاع شده زمانی که بلوک از حالت سریال خارج می شود، در دسترس نخواهد بود، بنابراین آیکون باید تمام حالت پشتیبان را خود سریال کند. به عنوان مثال، زمانی که یک بلوک مجزا سریالی می شود، یا زمانی که یک بلوک کپی پیست شده است، این امر صادق است.

دو مورد استفاده رایج برای این عبارتند از:

  • هنگامی که یک بلوک منفرد در فضای کاری بارگذاری می شود که در آن مدل داده پشتیبان وجود ندارد، نماد در حالت خودش اطلاعات کافی برای ایجاد یک مدل داده جدید دارد.
  • وقتی یک بلوک کپی پیست می شود، نماد همیشه به جای ارجاع به مدل موجود، یک مدل داده پشتیبان جدید ایجاد می کند.

وضعیت بارگذاری

برای ذخیره وضعیت نماد خود، باید متد loadState رابط کاربری ISerializable را پیاده سازی کنید. این متد 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);