上下文菜单

当用户右键点击(或长按)某个块或工作区时,系统会显示一个上下文菜单,其中包含其他操作。您可以配置此上下文菜单,以显示其他选项或移除默认选项。本指南介绍了如何向所有块或所有工作区添加自定义选项。如果您只想更改一种类型的块的上下文菜单,请参阅自定义块页面上的信息。

上下文菜单 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,并根据需要进行更改。