切换菜单项在点击时触发其 onAction。它还具有状态的概念。这意味着它可以被切换为 on 和 off。切换菜单项通过在其处于 on 状态时在菜单项文本右侧显示的勾选标记向用户提供视觉反馈。

选项

名称值要求描述

text

string

可选

要显示的文本。

icon

string

可选

要显示的图标名称。必须对应于一个图标:在 图标包 中,在 自定义图标包 中,或使用 addIcon API 添加。

value

string

可选

与菜单项关联的值。

active

boolean

可选

默认值:false - 切换菜单项的初始状态值。

enabled

boolean

可选

默认值:true - 表示菜单项的状态。当为 false 时,菜单项不可点击。由菜单项的 API 切换。

onSetup

(api) => (api) => void

可选

默认值:() => () => {} - 每当菜单项被渲染、其菜单每次打开时调用的函数。详细信息请参见:使用 onSetup。

onAction

(api) => void

必需

菜单项被点击时调用的函数。

context

string

可选

默认值:mode:design - context 属性根据编辑器的当前状态动态启用或禁用菜单项。详细信息请参见:Context。

API

名称值描述

isActive

() => boolean

检查菜单项是否处于激活状态。

setActive

(state: boolean) => void

设置菜单项的激活状态。

isEnabled

() => boolean

检查菜单项是否可用。

setEnabled

(state: boolean) => void

设置菜单项的可用状态。

示例:创建一个切换菜单项

// 菜单项在菜单关闭和打开时会重新创建,因此我们需要
// 一个变量来存储切换菜单项的状态。
let toggleState = false;

tinymce.init({
  selector: 'textarea',
  menu: {
    custom: { title: 'Custom Menu', items: 'undo redo toggleitem' }
  },
  menubar: 'file edit custom',
  setup: (editor) => {
    editor.ui.registry.addToggleMenuItem('toggleitem', {
      text: 'My toggle menu item',
      icon: 'home',
      onAction: () => {
        toggleState = !toggleState;
        alert('Toggle menu item clicked');
      },
      onSetup: (api) => {
        api.setActive(toggleState);
        return () => {};
      }
    });
  }
});

使用 onSetup

onSetup 接受一个接收组件 API 的函数。该函数应返回一个回调,该回调在传入组件 API 后不返回任何内容。这是因为 onSetup 在组件每次渲染时运行,而 onSetup 返回的回调在组件销毁时执行。从 onSetup 返回的函数本质上是一个 onTeardown 处理程序,可用于取消绑定事件和回调。

为了清晰起见,在代码中 onSetup 可能如下所示:

onSetup: (api) => {
  // 在组件创建时运行
  // 配置组件或绑定事件监听器

  return (api) => {
    // 在组件销毁时运行
    // 取消绑定事件监听器或清理资源
  };
};

要将回调函数绑定到编辑器事件,请使用 editor.on(eventName, callback)。要取消绑定事件监听器,请使用 editor.off(eventName, callback)。任何事件监听器 应该 在清理回调中取消绑定。唯一不需要取消绑定的编辑器事件是 init,例如 editor.on('init', callback)。

  • 传递给 editor.off() 的回调函数应该是传递给 editor.on() 的同一个函数。例如,如果在按钮创建时将一个 editorEventCallback 函数绑定到 NodeChange 事件,onSetup 应返回 (api) => editor.off('NodeChange', editorEventCallback)。

  • 如果 onSetup 没有注册任何事件监听器,或者只监听 init 事件,onSetup 可以返回一个空函数,例如 return () => {};。