CKEditor,初始化使用insertElement添加的小部件

我创建了一些小部件,他们在初始启动时加载得很好,但我通过以下方式将更多此类小部件添加到编辑器中:

ckeditorInstance.insertElement( CKEDITOR.dom.element.createFromHtml('')); 

它插入很好,但是ckeditor无法识别作为窗口小部件插入的元素,因此窗口小部件可编辑字段不会像它们应该那样启用。

有没有办法让ckeditor重新扫描其内容来初始化它尚未初始化的任何新小部件?

数据格式

首先 – 小部件的数据格式(小部件在数据中的表示方式)和内部格式(在编辑器中如何表示)之间存在分离。 您可能熟悉upcast和downcast函数 – 它们在这些格式之间进行转换(向上转换意味着将数据格式转换为内部格式)。

仅当处理数据字符串时 ,向上转换和向下转换才起作用,但如果使用editor#insertElement插入内容则没有处理,因此没有向上转换。

插入

你有两个解决方案:

  1. 使用editor#insertHtml而不是editor#insertElement 。 您的小部件将在插入之前进行上传,因此它将以良好的格式插入。

  2. 自己处理upcasting(如果需要)并使用editor#insertElement

初始化

这是小部件生命的第一步 – 必须插入。 第二是要初始化。

  1. 目前存在一个错误 (将在两周内修复), insertHtml方法插入的小部件未初始化。 所以,此时,在使用editor#insertHtml插入小部件后,您需要调用:

    editor.widgets.checkWidgets()

  2. 如果使用editor#insertElement ,则需要注意初始化窗口小部件。 要做那个电话:

    editor.widgets.initOn( element, 'widgetName' )

在两种情况下, 在插入后初始化窗口小部件

查看Widgets API以获取更多详细信息。

另请参阅我的答案, 解释如何知道元素是否是窗口小部件以及如何将它们插入编辑器 。