การเรียงอันดับ

การจัดรูปแบบเป็นอนุกรมคือการบันทึกสถานะของพื้นที่ทํางานเพื่อให้โหลดกลับเข้าไปในพื้นที่ทํางานในภายหลังได้ ซึ่งรวมถึงการจัดลำดับสถานะของการบล็อก ตัวแปร หรือปลั๊กอินต่างๆ ที่คุณต้องการบันทึก คุณสามารถแปลงข้อมูลทั้งหมดที่ต้องการบันทึกเป็นรูปแบบข้อความเพื่อให้จัดเก็บได้ง่าย จากนั้นโหลดข้อมูลดังกล่าวกลับไปยังเวิร์กスペースที่ใช้งานได้อย่างเต็มรูปแบบในภายหลัง

Blockly มีข้อมูลนี้ 2 รูปแบบ ได้แก่ JSON และ XML เราขอแนะนำให้ใช้ระบบ JSON สำหรับโปรเจ็กต์ใหม่ และแนะนำให้โปรเจ็กต์เก่าที่ใช้ XML อัปเกรด ระบบ XML เป็นรูปแบบการบันทึกเดิม แต่จะไม่มีการนําออก แต่จะไม่ได้รับฟีเจอร์ใหม่

ระบบ JSON

ระบบการจัดรูปแบบ JSON ประกอบด้วยเครื่องมือจัดรูปแบบหลายรายการ มีตัวจัดรูปแบบในตัวสำหรับบล็อกและตัวแปร และคุณยังลงทะเบียนตัวจัดรูปแบบเพิ่มเติมได้ด้วย โดยแต่ละตัวจัดรูปแบบจะมีหน้าที่จัดรูปแบบและจัดรูปแบบสถานะของปลั๊กอินหรือระบบหนึ่งๆ

การบันทึกและการโหลด

พื้นที่ทำงาน

คุณสามารถจัดรูปแบบหรือถอดรูปแบบสถานะของทั้งพื้นที่ทํางานได้โดยเรียกใช้เมธอด save และ load ในเนมสเปซ workspaces

const state = Blockly.serialization.workspaces.save(myWorkspace);
Blockly.serialization.workspaces.load(state, myWorkspace);

การเรียกเหล่านี้จะจัดรูปแบบหรือถอดรูปแบบระบบแต่ละระบบทั้งหมด (แสดงโดยตัวจัดรูปแบบ) ที่ลงทะเบียนกับ Workspace

บล็อกแต่ละรายการ

คุณสามารถจัดเรียงหรือแยกวิเคราะห์แต่ละบล็อกได้โดยเรียกใช้เมธอด save และ append ในเนมสเปซ blocks

const blockJson = Blockly.serialization.blocks.save(myBlock);
const duplicateBlock =
    Blockly.serialization.blocks.append(blockJson, myWorkspace);

ระบบแต่ละระบบ

คุณสามารถจัดเรียงหรือจัดเรียงข้อมูลระบบแต่ละระบบ (เช่น บล็อก ตัวแปร ปลั๊กอิน ฯลฯ) ได้โดยสร้างตัวจัดเรียงข้อมูลที่เชื่อมโยง และเรียกใช้เมธอด save และ load ของตัวจัดเรียงข้อมูล

// Saves only the variables information for the workspace.
const serializer = new Blockly.serialization.variables.VariableSerializer();
const state = serializer.save(myWorkspace);
serializer.load(state, myWorkspace);

ลำดับการแปลงข้อมูล

ระบบ JSON มีลําดับการแปลงเป็นอนุกรมที่ชัดเจน ซึ่งทําให้ป้องกันสถานะที่ซ้ำกันภายในการบันทึกได้ง่ายขึ้น

เมื่อมีการเรียก Blockly.serialization.workspaces.load ตัวซีเรียลไลซ์จะได้รับสถานะให้ดีซีเรียลไลซ์ตามลำดับลำดับความสำคัญ มีการอธิบายเพิ่มเติมในส่วน Serializers โดยมีจุดประสงค์เพื่อให้ตัวซีเรียลไลเซอร์ต้องอาศัยสถานะจากระบบอื่น

ลำดับการแปลงข้อมูลแบบย้อนกลับของโปรแกรมแปลงข้อมูลในตัวมีดังนี้

  1. โมเดลตัวแปรจะได้รับการแปลงกลับ
  2. โมเดลขั้นตอนได้รับการดีซีเรียลไลซ์
  3. การบล็อกได้รับการดีซีเรียลไลซ์ ระบบจะแปลงค่าบล็อกระดับบนสุดแต่ละรายการเป็นรูปแบบเดิมในลําดับที่กําหนดเอง
    1. ประเภทได้รับการแปลงกลับ ซึ่งจะสร้างบล็อก ทริกเกอร์เมธอด init และรวมส่วนขยาย
    2. แอตทริบิวต์ได้รับการแปลงกลับ ซึ่งรวมถึงพร็อพเพอร์ตี้ที่ใช้กับบล็อกใดก็ได้ เช่น x, y, ยุบ, ปิดใช้ และข้อมูล
    3. สถานะเพิ่มเติมได้รับการแปลงกลับ ดูข้อมูลเพิ่มเติมได้ในเอกสารส่วนขยายและ Mutators
    4. บล็อกเชื่อมต่อกับบล็อกหลัก (หากมี)
    5. ไอคอนจะได้รับการแปลงข้อมูลอีกครั้ง ระบบจะแปลงค่ากลับไอคอนแต่ละรายการในลําดับที่กําหนดเอง
    6. ฟิลด์ได้รับการแปลงกลับ ระบบจะแปลงค่าแต่ละช่องเป็นรูปแบบเดิมในลำดับที่กำหนดเอง
    7. บล็อกอินพุตจะได้รับการแปลงกลับ ซึ่งรวมถึงการบล็อกที่เชื่อมต่อกับอินพุตค่าและอินพุตคำสั่ง ระบบจะแปลงค่าอินพุตแต่ละรายการเป็นรูปแบบเดิมในลําดับที่ไม่เจาะจง
    8. บล็อกถัดไปได้รับการดีซีเรียลไลซ์

กรณีที่ควรบันทึกสถานะเพิ่มเติม

สำหรับบล็อก หากคุณมีข้อมูลที่อยู่ในลำดับต่ำกว่าซึ่งขึ้นอยู่กับข้อมูลที่อยู่ในลำดับสูงกว่า คุณควรทำซ้ำข้อมูลดังกล่าวและเพิ่มลงในสถานะเพิ่มเติม

ตัวอย่างเช่น หากคุณมีฟิลด์ที่มีเฉพาะในกรณีที่บล็อกถัดไปเชื่อมต่ออยู่ คุณควรเพิ่มข้อมูลเกี่ยวกับบล็อกถัดไปนั้นลงในสถานะเพิ่มเติม เพื่อให้ระบบเพิ่มฟิลด์ลงในบล็อกได้ก่อนที่จะแปลงสถานะของฟิลด์กลับ

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

โปรดทราบว่ากฎเกี่ยวกับการทำซ้ำสถานะควรคำนึงถึงด้วยว่าการบล็อกสแต็ก ไอคอน ช่อง และการบล็อกอินพุตได้รับการดีซีเรียลไลซ์ในลำดับที่กำหนดเอง เช่น หากมีช่อง B อยู่ช่องหนึ่งเฉพาะเมื่ออีกช่อง A มีค่าที่กำหนด คุณควรเพิ่มข้อมูลเกี่ยวกับ A ไปยังสถานะเพิ่มเติมในกรณีที่ B ได้รับการดีซีเรียลไลซ์ก่อน A

บล็อกฮุก

โปรดดูข้อมูลเกี่ยวกับวิธีเพิ่มการจัดรูปแบบเพิ่มเติมลงในบล็อกในเอกสารประกอบเกี่ยวกับส่วนขยายและตัวเปลี่ยนรูปแบบ

ฮุกของสนาม

สำหรับข้อมูลเกี่ยวกับวิธีเรียงลำดับช่องต่างๆ โปรดดูเอกสารประกอบช่องที่กำหนดเอง

ฮุกตัวจัดรูปแบบ

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

มักใช้ตัวจัดรูปแบบเพิ่มเติมเพื่อจัดรูปแบบและจัดรูปแบบสถานะของปลั๊กอิน

Blockly.serialization.registry.register(
    'workspace-comments',  // Name
    {
      save: saveFn,      // Save function
      load: loadFn,      // Load function
      clear: clearFn,    // Clear function
      priority: 10,      // Priority
    });

เมื่อลงทะเบียนตัวจัดรูปแบบ คุณต้องระบุข้อมูลต่อไปนี้

  • ชื่อสำหรับเครื่องมือจัดรูปแบบ ซึ่งระบบจะบันทึกข้อมูลไว้ด้วย
  • ฟังก์ชันเพื่อsaveสถานะของปลั๊กอิน/ระบบที่เชื่อมโยงกับตัวแปลงไฟล์
  • ฟังก์ชันสำหรับclearสถานะ
  • ฟังก์ชันเพื่อloadสถานะ
  • priority ซึ่งใช้เพื่อกำหนดลําดับการแปลงข้อมูล

    คุณกำหนดลําดับความสําคัญของเครื่องมือจัดรูปแบบตามลําดับความสําคัญในตัวได้

เมื่อเรียก Blockly.serialization.workspaces.save ระบบจะเรียกใช้ฟังก์ชัน save ของ Serializer แต่ละรายการ และเพิ่มข้อมูลของฟังก์ชันนั้นลงในเอาต์พุต JSON สุดท้าย

{
  "blocks": { ... },
  "workspaceComments": [ // Provided by workspace-comments serializer
    {
      "x": 239,
      "y": 31,
      "text": "Add 2 + 2"
    },
    // etc...
  ]
}

เมื่อมีการเรียกใช้ Blockly.serialization.workspaces.load ระบบจะทริกเกอร์ตัวอนุกรมแต่ละรายการตามลำดับความสำคัญ ตัวจัดรูปแบบที่มีค่าลําดับความสําคัญเป็นบวกมากกว่าจะทริกเกอร์ก่อนตัวจัดรูปแบบที่มีค่าลําดับความสําคัญเป็นบวกน้อยกว่า

เมื่อเรียกใช้โปรแกรมจัดรูปแบบข้อมูล 2 สิ่งต่อไปนี้จะเกิดขึ้น

  1. ระบบจะเรียกใช้ฟังก์ชัน clear ที่ระบุ วิธีนี้ช่วยให้มั่นใจว่าสถานะของปลั๊กอิน/ระบบจะสะอาดก่อนที่จะโหลดสถานะเพิ่มเติม ตัวอย่างเช่น โปรแกรมจัดรูปแบบข้อความสำหรับ workspace-comments จะนำความคิดเห็นที่มีอยู่ทั้งหมดออกจาก Workspace
  2. ระบบจะเรียกใช้ฟังก์ชัน load ที่ระบุ

ระบบ XML

ระบบ XML ช่วยให้คุณสามารถจัดรูปแบบพื้นที่ทํางานเป็นโหนด XML ได้ ซึ่งเป็นระบบการจัดรูปแบบเดิมของ Blockly ตอนนี้เราจึงหยุดพัฒนาฟีเจอร์นี้ ซึ่งหมายความว่าฟีเจอร์ดังกล่าวจะไม่ได้รับการอัปเดต ด้วยเหตุนี้ เราขอแนะนำให้ใช้ระบบ JSON หากเป็นไปได้

API

ดูข้อมูลเกี่ยวกับ API ของระบบ XML ได้ที่เอกสารอ้างอิง

บล็อกฮุก

โปรดดูข้อมูลเกี่ยวกับวิธีเพิ่มการจัดรูปแบบเพิ่มเติมลงในบล็อกที่เอกสารประกอบเกี่ยวกับส่วนขยายและตัวเปลี่ยน

ฮุกของสนาม

ดูข้อมูลเกี่ยวกับวิธีจัดรูปแบบฟิลด์ได้ในเอกสารประกอบฟิลด์ที่กำหนดเอง

การเลือกระหว่าง JSON กับ XML

เราขอแนะนำให้ใช้ตัวทำให้อนุกรม JSON แทน XML ระบบ JSON ให้คุณทำให้สถานะของพื้นที่ทำงานเป็นอนุกรมให้กับออบเจ็กต์ JavaScript ซึ่งมีข้อดีดังนี้

  1. JSON บีบอัดหรือแปลงเป็นรูปแบบอื่นได้ง่าย
  2. JSON นั้นทำงานกับโปรแกรมได้อย่างง่ายดาย
  3. JSON ขยายและต่อท้ายข้อมูลได้ง่าย

นอกจากนี้ ระบบ XML จะไม่ได้รับการอัปเดตอีกต่อไป และจะไม่มีฟีเจอร์เมื่อเทียบกับ JSON Serializer ตัวอย่างเช่น คุณสามารถลงทะเบียนซีเรียลไลเซอร์ JSON ของคุณเองเพื่อให้บันทึกและโหลดข้อมูลเพิ่มเติมได้ง่ายๆ เช่น ข้อมูลสำหรับปลั๊กอินหรือการปรับแต่งที่คุณได้เพิ่มไว้ ซึ่งระบบ XML ไม่สามารถทำได้

หากคุณเคยใช้การแปลงเป็นอนุกรม XML โปรดดูข้อมูลเกี่ยวกับวิธีอัปเกรดในคู่มือการย้ายข้อมูล