更新至 CKEditor 5 v27.x
更新 CKEditor 5 安装时,请确保所有包的版本一致,以避免错误。
对于自定义版本,您可能需要尝试删除package-lock.json
或 yarn.lock
文件(如果适用),并在重建编辑器之前重新安装所有包。为了获得最佳效果,请确保您使用最新版本的包。
# 更新至 CKEditor 5 v27.1.0
发布于 2021 年 4 月 21 日。
有关版本 27.1.0 中引入的所有更改的完整列表,请参阅 CKEditor 5 v27.1.0 的发布说明。
以下是升级到 CKEditor 5 v27.1.0 时需要您注意的最重要的更改。
# 禁止嵌套表格
在 27.1.0 版本之前,不允许将表格插入另一个表格。
如果您希望恢复此限制,请参阅表格功能指南的 禁止嵌套表格 部分。
# 禁止嵌套块引用
在 27.1.0 版本之前,不允许将块引用插入另一个块引用。
如果您希望恢复此限制,请参阅块引用功能指南的 禁止嵌套块引用 部分。
# 更新至 CKEditor 5 v27.0.0
发布于 2021 年 3 月 24 日。
有关版本 27.0.0 中引入的所有更改的完整列表,请参阅 CKEditor 5 v27.0.0 的发布说明。
以下是升级到 CKEditor 5 v27.0.0 时需要您注意的最重要的更改。
# 剪贴板输入管道集成
从 v27.0.0 开始,Clipboard
插件不再触发 inputTransformation
事件。我们重构了此功能的代码,并将其拆分为
ClipboardPipeline
插件,PastePlainText
插件,DragDrop
插件。
Clipboard
插件成为一个“粘合”插件,加载上面列出的插件。
从 v27.0.0 开始,ClipboardPipeline
插件负责触发 ClipboardPipeline#inputTransformation
事件,以及新的 ClipboardPipeline#contentInsertion
事件。
不应该在您的功能代码中触发或停止 view.Document#clipboardInput
和 ClipboardPipeline#inputTransformation
事件。应将 data.content
属性分配为覆盖默认内容。您只能在您想要完全禁用特定内容的粘贴/拖放时才停止此事件。
您可以在 剪贴板深入指南 中详细了解整个输入管道。
# view.Document
事件冒泡
CKEditor v27.0.0 引入了 view.Document
事件的冒泡,类似于 DOM 中的冒泡工作方式。这使我们能够重新排列以前依赖于 priority
属性的许多监听器。但是,这意味着使用优先级的现有监听器现在可能在错误的时间(以不同的顺序)执行。您应该根据监听器何时执行(在什么上下文/元素/阶段)来审查这些监听器。
在 事件系统指南 中阅读有关冒泡事件的更多信息。
# delete
事件
以前,不同的功能在不同的优先级级别上处理 delete
事件,例如,确保列表项优先于包含它的块引用。从 v27.0.0 开始,此优先级由事件在视图文档树上的冒泡来处理。现在,注册到视图元素中更深层的监听器会在更靠近 根元素 的元素的监听器之前触发。
查看核心编辑器功能中所有 delete
监听器的列表及其 优先级
功能 | v27 之前的优先级 | 从 v27 开始的事件上下文 |
---|---|---|
列表 | 高 + 10 | li @ 正常 |
块引用 | 高 + 5 | blockquote @ 正常 |
周围的部件类型 | 高 + 1 | isWidget @ 正常 |
部件 | 高 | $root @ 正常 |
删除 | 正常 | $document @ 低 |
查看此表,即使您的监听器监听了 highest
优先级,它也会在最后一个监听了 $document
且优先级为 low
的处理程序之前触发,因为 $document
是 注册监听器的默认上下文。
以下是如何与块引用功能正确集成的示例更改
// Old code.
this.listenTo( view.document, 'delete', ( evt, data ) => {
// ...
}, { priority: priorities.high + 5 } );
// New code.
this.listenTo( view.document, 'delete', ( evt, data ) => {
// ...
}, { context: 'blockquote' } );
如果您将部分监听器附加到 delete
事件,我们建议您审查您的集成。
# enter
事件
enter
事件的情况与 delete
事件类似。
以下是如何与部件系统正确集成的示例更改
// Old code.
this.listenTo( view.document, 'enter', ( evt, data ) => {
// ...
} );
// New code.
this.listenTo( view.document, 'enter', ( evt, data ) => {
// This event could be triggered from inside the widget but we are interested
// only when the widget itself is selected.
if ( evt.eventPhase != 'atTarget' ) {
return;
}
// ...
}, { context: isWidget } );
如果您将部分监听器附加到 enter
事件,我们建议您审查您的集成。
# arrowKey
事件
这是由 ArrowKeysObserver
引入的新事件类型。它在 normal
优先级上监听 keydown
事件,并触发在视图文档树上冒泡的 arrowKey
事件。这与 EnterObserver
和 DeleteObserver
的行为类似。
如果您将部分监听器附加到 keydown
事件以处理箭头键按下,则应审查您的集成。
我们每天都在努力使我们的文档保持完整。您是否发现过时信息?是否缺少某些内容?请通过我们的 问题跟踪器 报告。
随着版本 42.0.0 的发布,我们重新编写了许多文档以反映新的导入路径和功能。感谢您的反馈,这将帮助我们确保文档的准确性和完整性。