เมื่อผู้ใช้คลิกขวา (หรือกดค้าง) ที่บล็อกหรือพื้นที่ทำงาน เมนูบริบทที่มีการดำเนินการเพิ่มเติมจะปรากฏขึ้น คุณกำหนดค่าเมนูตามบริบทนี้ ให้แสดงตัวเลือกเพิ่มเติมหรือนำตัวเลือกเริ่มต้นออกได้ คู่มือนี้มีเนื้อหาเกี่ยวกับ การเพิ่มตัวเลือกที่กำหนดเองลงในบล็อกทั้งหมดหรือพื้นที่ทำงานทั้งหมด หากต้องการเปลี่ยนเมนูตามบริบทของการบล็อกเพียงประเภทเดียว โปรดดูข้อมูลในหน้าการบล็อกที่กำหนดเอง
API เมนูตามบริบท
คลาส ContextMenuRegistry
มีวิธีการลงทะเบียน ยกเลิกการลงทะเบียน และรับตัวเลือกเมนูตามบริบททั้งหมด คลาสนี้เป็นซิงเกิลตัน ดังนั้นจึงควรเรียกใช้เมธอดในออบเจ็กต์ Blockly.ContextMenuRegistry.registry
มากกว่าการสร้างอินสแตนซ์ใหม่ด้วยตัวเอง คลาส ContextMenu
จะเรียกเมธอด getContextMenuItems
เมื่อใดก็ตามที่ควรแสดงเมนูตามบริบท หากบล็อกหรือพื้นที่ทำงานมีฟังก์ชัน customContextMenu
ระบบจะเรียกใช้ในภายหลังเพื่อแก้ไขรายการตัวเลือก
การเพิ่มตัวเลือกที่กำหนดเอง
ตัวเลือกเมนูแต่ละรายการในรีจิสทรีมีพร็อพเพอร์ตี้หลายรายการ ดังนี้
callback
: ฟังก์ชันที่จะเรียกใช้เมื่อมีการคลิกตัวเลือกเมนูscopeType
: อาจเป็นBlockly.ContextMenuRegistry.ScopeType.BLOCK
หรือBlockly.ContextMenuRegistry.ScopeType.WORKSPACE
สำหรับบริเวณที่ควรแสดงตัวเลือกนี้ หากควรแสดงตัวเลือกสำหรับทั้งพื้นที่ทำงานและการบล็อก คุณควรบันทึกตัวเลือกนั้น 1 ครั้งสำหรับ scopeType แต่ละรายการdisplayText
: สตริง หรือ HTML หรือฟังก์ชันที่ส่งคืน URL เดิมก็ได้ กำหนดข้อความที่จะแสดงในเมนูpreconditionFn
: ฟังก์ชันที่แสดงผลหนึ่งในenabled
,disabled
หรือhidden
เพื่อระบุว่าควรแสดงผลตัวเลือกเมนูหรือไม่และอย่างไรweight
: ตัวเลขที่กำหนดลำดับการจัดเรียงของตัวเลือก ตัวเลือกที่มีน้ำหนักสูงกว่าจะปรากฏภายหลังในเมนูตามบริบทid
: รหัสสตริงที่ไม่ซ้ำกันสําหรับตัวเลือก
ระบบจะเรียกฟังก์ชัน callback
, displayText
(หากฟังก์ชัน) และ preconditionFn
แต่ละรายการด้วยออบเจ็กต์ Scope
ที่มีข้อมูลเกี่ยวกับพื้นที่ทำงานที่แน่นอนหรือบล็อกที่คลิก ด้วยวิธีนี้ ตัวเลือกเมนูตามบริบทจะสามารถอ้างอิงพร็อพเพอร์ตี้เกี่ยวกับพื้นที่ทำงานหรือบล็อกได้ ตัวอย่างเช่น ตัวเลือกเมนูตามบริบทที่อนุญาตให้ผู้ใช้ลบบล็อกทั้งหมดจะแสดงข้อความว่า "ลบการบล็อก 42 รายการ" หากพื้นที่ทำงานมีการบล็อก 42 รายการ เมื่อใช้ preconditionFn
ตัวเลือกเมนูอาจเป็น enabled
หากพร็อพเพอร์ตี้บางรายการของการบล็อกเป็นจริง หรือ disabled
ในกรณีอื่นๆ
สำหรับตัวอย่างเพิ่มเติม คุณสามารถดูการลงทะเบียนตัวเลือกเมนูตามบริบทเริ่มต้นได้ใน contextmenu_items.js
การเปลี่ยนหรือนำตัวเลือกเริ่มต้นออก
คุณยกเลิกการลงทะเบียนตัวเลือกใดก็ได้กับ
Blockly.ContextMenuRegistry.registry.unregister(id)
รหัสสำหรับตัวเลือกเริ่มต้นจะอยู่ใน contextmenu_items.js
หากต้องการเปลี่ยนตัวเลือกเริ่มต้น โปรดโทรหา getItem
พร้อมแจ้งรหัส และทำการเปลี่ยนแปลงตามต้องการ