当用户右键点击(或长按)某个块或工作区时,系统会显示一个上下文菜单,其中包含其他操作。您可以配置此上下文菜单,以显示其他选项或移除默认选项。本指南介绍了如何向所有块或所有工作区添加自定义选项。如果您只想更改一种类型的块的上下文菜单,请参阅自定义块页面上的信息。
上下文菜单 API
ContextMenuRegistry
类包含用于注册、取消注册和获取所有上下文菜单选项的方法。该类是单例,因此应对 Blockly.ContextMenuRegistry.registry
对象调用方法,而不是自行实例化新实例。每当应显示上下文菜单时,ContextMenu
类都会调用 getContextMenuItems
方法。如果代码块或工作区具有 customContextMenu
函数,则该函数会在之后调用以修改选项列表。
添加自定义选项
注册表中的每个菜单选项都具有多个属性:
callback
:点击菜单选项时调用的函数。scopeType
:应显示此选项的位置的Blockly.ContextMenuRegistry.ScopeType.BLOCK
或Blockly.ContextMenuRegistry.ScopeType.WORKSPACE
之一。如果应同时针对工作区和块显示某个选项,则应针对每个 scopeType 注册一次。displayText
:字符串、HTML 或返回前两者之一的函数。确定菜单中显示的文本。preconditionFn
:返回enabled
、disabled
或hidden
其中之一的函数,以确定是否应呈现菜单选项以及如何呈现。weight
:用于确定选项排序顺序的数字。权重较高的选项稍后会显示在上下文菜单中。id
:选项的唯一字符串 ID。
每个函数 callback
、displayText
(如果是函数)和 preconditionFn
都将通过 Scope
对象调用,该对象中包含所点击的确切工作区或块的相关信息。这样,您的上下文菜单选项就可以引用工作区或块的相关属性。例如,如果工作区包含 42 个块,则允许用户删除所有块的上下文菜单选项会显示“删除 42 个块”。使用 preconditionFn
时,如果代码块的某些属性为 true,则菜单选项可以为 enabled
,否则为 disabled
。
如需查看更多示例,您可以查看 contextmenu_items.js 中默认上下文菜单选项的注册情况。
更改或移除默认选项
您可以使用 Blockly.ContextMenuRegistry.registry.unregister(id)
取消注册任何选项。默认选项的 ID 位于 contextmenu_items.js 中。
如需更改默认选项,请使用 ID 调用 getItem
,并根据需要进行更改。