لغو نماد نظر

می توانید نماد نظر داخلی را لغو کنید. برای مثال، ممکن است بخواهید حباب بازشوی نظر متفاوت به نظر برسد.

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

برای لغو نماد نظر، CommentIcon را گسترش دهید، روش‌های انتخابی را در ICommentIcon لغو کنید و نماد جدید خود را ثبت کنید.

گسترش CommentIcon

با گسترش CommentIcon شروع کنید.

class MyCommentIcon extends Blockly.icons.CommentIcon {
  constructor(sourceBlock) {
    super(sourceBlock);
  }
}

روش‌ها را در ICommentIcon و Icon لغو کنید

برای سفارشی کردن نماد خود، می‌توانید روش‌های موجود در ICommentIcon (شرح شده در بخش‌های زیر) و Blockly.icons.Icon (شرح شده در ایجاد نمادهای سفارشی ) را لغو کنید. getType را لغو نکنید، که باید 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();
}

ICommentIcon همچنین به متدهای getBubbleLocation و setBubbleLocation نیاز دارد که مکان حباب را در فضای کاری دریافت و تنظیم می کنند.

setBubbleLocation(location) {
  this.bubbleLocation = location;
}

getBubbleLocation() {
  return this.bubbleLocation;
}

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

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

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

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

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

نماد خود را ثبت کنید

در نهایت، نماد نظر موجود را لغو ثبت کنید و نماد نظر خود را ثبت کنید تا Blockly بتواند آن را نمونه برداری کند. از رشته 'comment' برای لغو ثبت و IconTypes.COMMENT برای ثبت نام استفاده کنید.

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

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