內容選單

使用者在區塊或工作區上按一下滑鼠右鍵 (或長按) 時,系統會顯示內容選單,其中包含其他動作。您可以設定此內容選單以顯示其他選項或移除預設選項。本指南說明如何在所有區塊或所有工作區中新增自訂選項。如果只想變更一種區塊的內容選單,請參閱自訂區塊頁面中的資訊。

內容選單 API

ContextMenuRegistry 類別包含註冊、取消註冊,以及取得所有內容選單選項的方法。類別屬於單例模式,因此您應在 Blockly.ContextMenuRegistry.registry 物件上呼叫方法,而不是自行將新的例項例項化。每當內容選單應顯示時,ContextMenu 類別會呼叫 getContextMenuItems 方法。如果區塊或工作區具有 customContextMenu 函式,則會之後再呼叫以修改選項清單。

新增自訂選項

登錄登錄的每個功能表選項都有多種屬性:

  • callback:點選選單選項時呼叫的函式。
  • scopeType:此處應顯示此選項的 Blockly.ContextMenuRegistry.ScopeType.BLOCKBlockly.ContextMenuRegistry.ScopeType.WORKSPACE 其中之一。如果兩個工作區和區塊都應顯示一個選項,則每個 scopeType 應分別註冊一次。
  • displayText:字串、HTML,或是傳回前述任一屬性的函式。決定選單中顯示的文字。
  • preconditionFn:傳回 enableddisabledhidden 其中之一的函式,用於判斷選單選項是否應轉譯,以及算繪方式。
  • weight:決定選項排序順序的數字。權重較高的選項會顯示在內容選單中。
  • id:選項的專屬字串 ID。

callbackdisplayText (如果函式) 和 preconditionFn 每個函式都會使用 Scope 物件呼叫,該物件含有所點選的工作區或區塊確切資訊。如此一來,內容選單選項就能參照工作區或區塊的屬性。舉例來說,允許使用者刪除所有區塊的內容選單選項,如果工作區含有 42 個區塊,就會顯示「刪除 42 個區塊」。使用 preconditionFn 時,如果區塊的某些屬性為 true,選單選項可以是 enabled,反之則為 disabled

如需更多範例,您可以在 contextmenu_items.js 中查看預設內容選單選項的註冊。

變更或移除預設選項

您可以使用 Blockly.ContextMenuRegistry.registry.unregister(id) 取消註冊任何選項。預設選項的 ID 位於 contextmenu_items.js 中。

如要變更預設選項,請使用 ID 呼叫 getItem,並視需要進行變更。