می توانید نماد نظر داخلی را لغو کنید. برای مثال، ممکن است بخواهید حباب بازشوی نظر متفاوت به نظر برسد.
برای لغو نماد نظر، 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()
را فرا میخوانید.