1.0.0-beta(2018 年 3 月)之后:
要将一些数据插入编辑器,只需使用“更改块”:
editor.model.change( writer => {
const insertPosition = editor.model.document.selection.getFirstPosition();
writer.insertText( linkText, { linkHref: linkUrl }, insertPosition );
} );
其中 linkText 和 linkUrl 是您应该从自定义 UI 中提供的变量。
以上内容适用于折叠选择。链接的文本将插入到插入符号位置。
1.0.0-beta 版中引入的最大区别是我们在 change() 调用中提供了 writer 对象,因此您不需要(也不应该)直接使用框架类构造函数。
您也可以按照您建议的方式使用editor.model.insertContent:
editor.model.change( writer => {
const linkedText = writer.createText( linkText, { linkHref: linkUrl } );
editor.model.insertContent( linkedText, editor.model.document.selection );
} );
如果选择没有折叠,这也可以正常工作,因为insertContent 做的更多(例如,如果选择没有折叠并且在两个段落之间,则选择内容将被删除并合并段落)。
1.0.0-beta 之前
DataController#insertContent() 接受模型的 DocumentFragment 或 Node(所以 Element 或 Text - 我刚刚注意到 API 文档中缺少此信息)。 p>
不幸的是,现在您需要访问Element 或Text 的构造函数才能创建它们。这意味着您需要build CKEditor 5 from source 而不是使用现有的构建。这并不难,但确实是矫枉过正。因此,我们现在正在开发exposing a sufficient part of the API in the existing classes,这样您就可以编写类似这样的简单集成代码,而无需在您的应用中构建 CKEditor 5。
无论如何,如果您要配置 webpack(或简单地 fork 现有构建),您可以编写一个简单的函数来插入链接文本:
import Text from '@ckeditor/ckeditor5-engine/src/model/text';
function insertLink( linkText, linkHref ) {
const text = new Text( linkText, { linkHref } );
editor.document.enqueueChanges( () => {
editor.data.insertContent( text, editor.document.selection );
} );
}