บันทึกและโหลดไอคอน

ไอคอนบางรายการมีสถานะที่จำเป็นต้องบันทึก ในขณะที่ไอคอนอื่นๆ มีการสร้างอินสแตนซ์ ตามรัฐที่มีอยู่ เช่น ไอคอนความคิดเห็นต้องบันทึกข้อความ ในขณะที่ไอคอนคำเตือนไม่ได้เกิดขึ้น เนื่องจากมีการสร้างอินสแตนซ์ขึ้นตามวิธีบล็อก เชื่อมต่อ แล้ว

หากไอคอนของคุณจำเป็นต้องบันทึกสถานะไว้ คุณจำเป็นต้องติดตั้ง อินเทอร์เฟซ 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);