เมนูบริบท

เมื่อผู้ใช้คลิกขวา (หรือกดค้าง) ที่บล็อกหรือพื้นที่ทำงาน เมนูบริบทที่มีการดำเนินการเพิ่มเติมจะปรากฏขึ้น คุณกำหนดค่าเมนูตามบริบทนี้ ให้แสดงตัวเลือกเพิ่มเติมหรือนำตัวเลือกเริ่มต้นออกได้ คู่มือนี้มีเนื้อหาเกี่ยวกับ การเพิ่มตัวเลือกที่กำหนดเองลงในบล็อกทั้งหมดหรือพื้นที่ทำงานทั้งหมด หากต้องการเปลี่ยนเมนูตามบริบทของการบล็อกเพียงประเภทเดียว โปรดดูข้อมูลในหน้าการบล็อกที่กำหนดเอง

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 พร้อมแจ้งรหัส และทำการเปลี่ยนแปลงตามต้องการ