การจัดรูปแบบเป็นอนุกรมคือการบันทึกสถานะของพื้นที่ทํางานเพื่อให้โหลดกลับเข้าไปในพื้นที่ทํางานในภายหลังได้ ซึ่งรวมถึงการจัดลำดับสถานะของการบล็อก ตัวแปร หรือปลั๊กอินต่างๆ ที่คุณต้องการบันทึก คุณสามารถแปลงข้อมูลทั้งหมดที่ต้องการบันทึกเป็นรูปแบบข้อความเพื่อให้จัดเก็บได้ง่าย จากนั้นโหลดข้อมูลดังกล่าวกลับไปยังเวิร์กスペースที่ใช้งานได้อย่างเต็มรูปแบบในภายหลัง
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 โดยมีจุดประสงค์เพื่อให้ตัวซีเรียลไลเซอร์ต้องอาศัยสถานะจากระบบอื่น
ลำดับการแปลงข้อมูลแบบย้อนกลับของโปรแกรมแปลงข้อมูลในตัวมีดังนี้
- โมเดลตัวแปรจะได้รับการแปลงกลับ
- โมเดลขั้นตอนได้รับการดีซีเรียลไลซ์
- การบล็อกได้รับการดีซีเรียลไลซ์ ระบบจะแปลงค่าบล็อกระดับบนสุดแต่ละรายการเป็นรูปแบบเดิมในลําดับที่กําหนดเอง
- ประเภทได้รับการแปลงกลับ ซึ่งจะสร้างบล็อก ทริกเกอร์เมธอด init และรวมส่วนขยาย
- แอตทริบิวต์ได้รับการแปลงกลับ ซึ่งรวมถึงพร็อพเพอร์ตี้ที่ใช้กับบล็อกใดก็ได้ เช่น x, y, ยุบ, ปิดใช้ และข้อมูล
- สถานะเพิ่มเติมได้รับการแปลงกลับ ดูข้อมูลเพิ่มเติมได้ในเอกสารส่วนขยายและ Mutators
- บล็อกเชื่อมต่อกับบล็อกหลัก (หากมี)
- ไอคอนจะได้รับการแปลงข้อมูลอีกครั้ง ระบบจะแปลงค่ากลับไอคอนแต่ละรายการในลําดับที่กําหนดเอง
- ฟิลด์ได้รับการแปลงกลับ ระบบจะแปลงค่าแต่ละช่องเป็นรูปแบบเดิมในลำดับที่กำหนดเอง
- บล็อกอินพุตจะได้รับการแปลงกลับ ซึ่งรวมถึงการบล็อกที่เชื่อมต่อกับอินพุตค่าและอินพุตคำสั่ง ระบบจะแปลงค่าอินพุตแต่ละรายการเป็นรูปแบบเดิมในลําดับที่ไม่เจาะจง
- บล็อกถัดไปได้รับการดีซีเรียลไลซ์
กรณีที่ควรบันทึกสถานะเพิ่มเติม
สำหรับบล็อก หากคุณมีข้อมูลที่อยู่ในลำดับต่ำกว่าซึ่งขึ้นอยู่กับข้อมูลที่อยู่ในลำดับสูงกว่า คุณควรทำซ้ำข้อมูลดังกล่าวและเพิ่มลงในสถานะเพิ่มเติม
ตัวอย่างเช่น หากคุณมีฟิลด์ที่มีเฉพาะในกรณีที่บล็อกถัดไปเชื่อมต่ออยู่ คุณควรเพิ่มข้อมูลเกี่ยวกับบล็อกถัดไปนั้นลงในสถานะเพิ่มเติม เพื่อให้ระบบเพิ่มฟิลด์ลงในบล็อกได้ก่อนที่จะแปลงสถานะของฟิลด์กลับ
อย่างไรก็ตาม หากคุณมีอินพุตที่มีเฉพาะในกรณีที่ช่องมีค่าหนึ่งๆ คุณไม่จําเป็นต้องเพิ่มข้อมูลเกี่ยวกับช่องนั้นลงในสถานะเพิ่มเติม เนื่องจากระบบจะแปลงสถานะของช่องเป็นรูปแบบเดิมก่อน และเมื่อแปลงแล้ว คุณจะเพิ่มอินพุตลงในบล็อกได้ โดยปกติแล้ว โปรแกรมตรวจสอบจะทริกเกอร์การเพิ่มอินพุต
โปรดทราบว่ากฎเกี่ยวกับการทำซ้ำสถานะควรคำนึงถึงด้วยว่าการบล็อกสแต็ก ไอคอน ช่อง และการบล็อกอินพุตได้รับการดีซีเรียลไลซ์ในลำดับที่กำหนดเอง เช่น หากมีช่อง 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 สิ่งต่อไปนี้จะเกิดขึ้น
- ระบบจะเรียกใช้ฟังก์ชัน
clear
ที่ระบุ วิธีนี้ช่วยให้มั่นใจว่าสถานะของปลั๊กอิน/ระบบจะสะอาดก่อนที่จะโหลดสถานะเพิ่มเติม ตัวอย่างเช่น โปรแกรมจัดรูปแบบข้อความสำหรับ workspace-comments จะนำความคิดเห็นที่มีอยู่ทั้งหมดออกจาก Workspace - ระบบจะเรียกใช้ฟังก์ชัน
load
ที่ระบุ
ระบบ XML
ระบบ XML ช่วยให้คุณสามารถจัดรูปแบบพื้นที่ทํางานเป็นโหนด XML ได้ ซึ่งเป็นระบบการจัดรูปแบบเดิมของ Blockly ตอนนี้เราจึงหยุดพัฒนาฟีเจอร์นี้ ซึ่งหมายความว่าฟีเจอร์ดังกล่าวจะไม่ได้รับการอัปเดต ด้วยเหตุนี้ เราขอแนะนำให้ใช้ระบบ JSON หากเป็นไปได้
API
ดูข้อมูลเกี่ยวกับ API ของระบบ XML ได้ที่เอกสารอ้างอิง
บล็อกฮุก
โปรดดูข้อมูลเกี่ยวกับวิธีเพิ่มการจัดรูปแบบเพิ่มเติมลงในบล็อกที่เอกสารประกอบเกี่ยวกับส่วนขยายและตัวเปลี่ยน
ฮุกของสนาม
ดูข้อมูลเกี่ยวกับวิธีจัดรูปแบบฟิลด์ได้ในเอกสารประกอบฟิลด์ที่กำหนดเอง
การเลือกระหว่าง JSON กับ XML
เราขอแนะนำให้ใช้ตัวทำให้อนุกรม JSON แทน XML ระบบ JSON ให้คุณทำให้สถานะของพื้นที่ทำงานเป็นอนุกรมให้กับออบเจ็กต์ JavaScript ซึ่งมีข้อดีดังนี้
- JSON บีบอัดหรือแปลงเป็นรูปแบบอื่นได้ง่าย
- JSON นั้นทำงานกับโปรแกรมได้อย่างง่ายดาย
- JSON ขยายและต่อท้ายข้อมูลได้ง่าย
นอกจากนี้ ระบบ XML จะไม่ได้รับการอัปเดตอีกต่อไป และจะไม่มีฟีเจอร์เมื่อเทียบกับ JSON Serializer ตัวอย่างเช่น คุณสามารถลงทะเบียนซีเรียลไลเซอร์ JSON ของคุณเองเพื่อให้บันทึกและโหลดข้อมูลเพิ่มเติมได้ง่ายๆ เช่น ข้อมูลสำหรับปลั๊กอินหรือการปรับแต่งที่คุณได้เพิ่มไว้ ซึ่งระบบ XML ไม่สามารถทำได้
หากคุณเคยใช้การแปลงเป็นอนุกรม XML โปรดดูข้อมูลเกี่ยวกับวิธีอัปเกรดในคู่มือการย้ายข้อมูล