创建对话框时,会返回一个对话框实例 API。例如,const instanceApi = editor.windowManager.open(config);。对话框 API 实例也会传递给某些对话框配置选项。

实例 API 是一个 JavaScript 对象,其中包含附加到对话框实例的方法。当对话框关闭时,实例 API 会被销毁。

对话框数据和状态

所有对话框都有一个内部数据存储,用于跟踪对话框面板组件的值和/或状态。

此数据存储采用 JavaScript 对象的形式,其中对象的键是已配置面板组件的name。例如,如果一个对话框包含一个使用name: myCheckbox配置的复选框组件,且该复选框未被选中,则对话框的数据对象将包含{ myCheckbox: false }。

可以使用对话框实例 API 的getData()函数访问对话框数据存储的当前值。也可以使用setData()来设置,该函数会自动更新相关组件。例如,如果在前面的例子中调用setData({ myCheckbox: true }),复选框将切换为选中状态。

若要在对话框打开时为组件设置初始值,请使用initialData 对话框配置选项。例如,通过在对话框的配置中包含initialData: { myCheckbox: true },可以在前面的例子中将复选框设置为在对话框打开时处于选中状态。

对话框 API 方法

方法描述

getData() => <T>

getData()返回一个键值对象,其结构与initialData相匹配。返回的数据对象中的键代表组件的name。

setData(newConfig: object) => void

setData(newData)更新数据集。此方法也适用于部分数据集。

setEnabled(name: string, state: string) => void

调用setEnabled()并传入组件的name和state将启用或禁用该组件。

focus(name: string) => void

调用focus()并传入组件的name将使浏览器的焦点集中在该组件上。

block(message: string) => void

调用block()并传入一条消息字符串将禁用整个对话框窗口并显示加载图像。这对于处理异步数据非常有用。该消息用于屏幕阅读器的可访问性。当数据准备就绪时,使用unblock()来解除对话框的阻塞。

unblock() => void

调用unblock()将解除对话框的阻塞并恢复其功能。

close() => void

调用close()方法将关闭对话框。关闭对话框时,所有 DOM 元素和对话框数据都将被销毁。当再次调用windowManager.open(config)时,所有 DOM 元素和数据都将从配置中重新创建。

redial(config) => void

调用redial()并传入对话框主体配置将销毁并重新创建对话框的主体。请参阅 Redial 文档。

showTab(name: string) => void

此方法仅适用于选项卡面板对话框。调用showTab()并传入选项卡的name将使对话框切换到指定的选项卡。

Redial

Redial是一种概念,允许开发人员用新的配置替换对话框的配置。这可用于以下高级应用:

  • 在对话框打开时以编程方式更改其中显示的信息。

  • 根据用户操作更改面板组件。例如,根据用户对另一个交互式组件的输入更新selectbox组件中的选项。

  • 创建一个多页面表单,其中一个按钮用于进入下一页。

若要重新设置对话框,请将新的对话框配置传递给对话框实例 API 的redial()方法。

目前,Redial 不支持部分对话框替换或特定组件的替换。必须向 Redial 传递整个对话框配置。

有关如何使用 Redial 的更多信息,请参阅redial 示例。