لغو نمادهای داخلی

Blockly دارای سه نوع آیکون داخلی است: نظرات، هشدارها و mutators.

نمادهای نظر قابل لغو هستند. این به این معنی است که می‌توانید به Blockly بگویید وقتی متدهایی مانند myBlock.setCommentText() فراخوانی می‌کنید، کلاس آیکون نظرات شما را نمونه‌سازی کند. برای مثال اگر می‌خواهید حباب بازشوی نظر متفاوت به نظر برسد، ممکن است بخواهید این کار را انجام دهید.

بلوکی با نماد نظر برجسته شده است

آیکون‌های هشدار و جهش‌پذیر قابل لغو نیستند.

نماد نظر

برای لغو نماد نظر، باید یک نماد سفارشی ایجاد کنید که رابط ICommentIcon را پیاده سازی کند و سپس آن را ثبت کنید.

پیاده سازی اساسی

قبل از افزودن منطق خاص نظر، اجرای اولیه نماد سفارشی خود را کامل کنید.

تایپ کنید

متد getType باید نماد نظر IconType برگرداند.

class MyCommentIcon extends Blockly.icons.Icon {
  getType() {
    return Blockly.icons.IconType.COMMENT;
  }
}

متن

رابط ICommentIcon نیاز دارد که نظر دارای متن باشد. متد getText باید متن نظر را برگرداند. متد setText باید متن نظر را تنظیم کند و هر گونه تصویری را به روز کند.

getText() {
  return this.text;
}

setText(text) {
  this.text = text;
  this.myRenderMethod();
}

حباب

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

bubbleIsVisible() {
  return this.bubbleVisible;
}

setBubbleVisible(visible: boolean) {
  this.bubbleVisible = visible;
}

برای اطلاعات بیشتر در مورد حباب ها، به استفاده از حباب های بازشو مراجعه کنید.

رابط ICommentIcon همچنین به یک متد getBubbleSize نیاز دارد که یک اندازه را برمی گرداند و یک setBubbleSize که آن را تنظیم می کند. همان استدلال قبلی از حالت ذخیره سازی حتی اگر نماد شما از نظر فنی حباب نداشته باشد در اینجا نیز صدق می کند.

getBubbleSize() {
  return this.bubbleSize;
}

setBubbleSize(size) {
  this.bubbleSize = size;
  this.myRenderMethod();
}

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

نماد نظر سفارشی شما باید رابط ISerializable را پیاده سازی کند. حالت باید با رابط CommentState مطابقت داشته باشد.

saveState() {
  return {
    text: this.text,
    pinned: this.bubbleVisible,
    height: this.bubbleSize.height,
    width: this.bubbleSize.width,
  }
}

loadState(state) {
  this.setText(state.text);
  this.setBubbleVisible(state.pinned);
  this.setBubbleSize(new Blockly.utils.Size(state.width, state.height));
}

برای اطلاعات بیشتر در مورد سریال سازی نمادها به ذخیره و بارگیری نمادها مراجعه کنید.

ثبت

در نهایت، باید نماد خود را ثبت کنید تا Blockly بتواند آن را نمونه برداری کند. حتما از نوع IconTypes.COMMENT استفاده کنید.

Blockly.icons.registry.register(Blockly.icons.IconType.COMMENT, myCommentIcon);