ไอคอนบางรายการมีสถานะที่ต้องบันทึก ขณะที่ไอคอนอื่นๆ จะมีการสร้างอินสแตนซ์โดยอิงตามสถานะที่มีอยู่ ตัวอย่างเช่น ไอคอนความคิดเห็นจะต้องบันทึกข้อความไว้ ขณะที่ไอคอนคำเตือนไม่ใช่เพราะระบบสร้างขึ้นตามการเชื่อมต่อบล็อก
หากไอคอนต้องบันทึกสถานะ คุณต้องใช้อินเทอร์เฟซ ISerializable
และregisterไอคอน
สถานะที่ไอคอนแสดงผลจะรวมอยู่ในพร็อพเพอร์ตี้ 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
ที่ไม่บังคับด้วย ซึ่งใช้โดยไอคอนที่อ้างอิงสถานะที่ทำให้เป็นอนุกรมโดยซีเรียลไลเซอร์อื่น (เช่น การสำรองข้อมูลโมเดลข้อมูล) สัญญาณพารามิเตอร์ที่สถานะอ้างอิงจะใช้งานไม่ได้เมื่อบล็อกได้รับการดีซีเรียลไลซ์ ดังนั้นไอคอนควรจะทำให้สถานะการสนับสนุนทั้งหมดเป็นอนุกรม ตัวอย่างเช่น กรณีนี้เกิดขึ้นจริงเมื่อมีการทำให้บล็อกหนึ่งๆ เป็นอนุกรม หรือเมื่อมีการคัดลอกและวางบล็อก
กรณีการใช้งานทั่วไปสำหรับกรณีนี้มี 2 กรณีดังนี้
- เมื่อมีการโหลดบล็อกแต่ละรายการลงในพื้นที่ทำงานที่ไม่มีโมเดลข้อมูลสนับสนุนอยู่ ไอคอนจะมีข้อมูลในสถานะของตัวเองเพียงพอที่จะสร้างโมเดลข้อมูลใหม่
- เมื่อมีการคัดลอกและวางบล็อก ไอคอนจะสร้างโมเดลข้อมูลสนับสนุนใหม่เสมอแทนที่จะอ้างอิงโมเดลที่มีอยู่
สถานะการโหลด
หากต้องการบันทึกสถานะของไอคอน คุณต้องใช้เมธอด 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);