ไอคอนบางรายการมีสถานะที่จำเป็นต้องบันทึก ในขณะที่ไอคอนอื่นๆ มีการสร้างอินสแตนซ์ ตามรัฐที่มีอยู่ เช่น ไอคอนความคิดเห็นต้องบันทึกข้อความ ในขณะที่ไอคอนคำเตือนไม่ได้เกิดขึ้น เนื่องจากมีการสร้างอินสแตนซ์ขึ้นตามวิธีบล็อก เชื่อมต่อ แล้ว
หากไอคอนของคุณจำเป็นต้องบันทึกสถานะไว้ คุณจำเป็นต้องติดตั้ง
อินเทอร์เฟซ ISerializable
และลงทะเบียน
ไอคอน
สถานะที่ไอคอนของคุณส่งคืนจะรวมอยู่ในพร็อพเพอร์ตี้ icons
ของ
สถานะของบล็อก:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
บันทึกสถานะ
ในการบันทึกสถานะไอคอน คุณจำเป็นต้องติดตั้ง
saveState
เมธอดของ ISerializable
ของ Google เมธอดนี้สามารถแสดงผล JSON ที่กำหนดเอง ซึ่งจะส่งไปยังไฟล์
loadState
วิธี
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
การทำให้เป็นอนุกรมและการสำรองข้อมูลแบบเต็มรูปแบบ
saveState
จะได้รับพารามิเตอร์ doFullSerialization
ที่ไม่บังคับด้วย นี่คือ
ใช้โดยไอคอนซึ่งอ้างอิงสถานะที่ต่อเนื่องกันโดย
serializer (เช่น การสำรองข้อมูลโมเดลข้อมูล) พารามิเตอร์จะส่งสัญญาณว่า
สถานะที่อ้างอิงจะใช้ไม่ได้เมื่อบล็อกมีการดีซีเรียลไลซ์ ดังนั้น
ควรเรียงลำดับสถานะของพื้นหลังทั้งหมดด้วยตนเอง ตัวอย่างเช่น ข้อมูลนี้เป็นจริง
เมื่อมีการคัดลอกบล็อกหนึ่งๆ หรือเมื่อมีการคัดลอกบล็อก
กรณีการใช้งานที่พบบ่อย 2 กรณีมีดังนี้
- เมื่อโหลดบล็อกเดี่ยวลงในพื้นที่ทำงานที่มีข้อมูลสนับสนุน ไม่มีโมเดล ไอคอนมีข้อมูลในสถานะของตัวเองเพียงพอที่จะ สร้างโมเดลข้อมูลใหม่
- เมื่อคัดลอกและวางการบล็อก ไอคอนจะสร้างการสนับสนุนใหม่เสมอ แทนการอ้างอิงรูปแบบที่มีอยู่
สถานะการโหลด
ในการบันทึกสถานะไอคอน คุณจำเป็นต้องติดตั้ง
loadState
เมธอดของ ISerializable
ของ Google เมธอดนี้จะรับ 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);