CKEditor,初始化使用insertElement添加的小部件
我创建了一些小部件,他们在初始启动时加载得很好,但我通过以下方式将更多此类小部件添加到编辑器中:
ckeditorInstance.insertElement( CKEDITOR.dom.element.createFromHtml(''));
它插入很好,但是ckeditor无法识别作为窗口小部件插入的元素,因此窗口小部件可编辑字段不会像它们应该那样启用。
有没有办法让ckeditor重新扫描其内容来初始化它尚未初始化的任何新小部件?
数据格式
首先 – 小部件的数据格式(小部件在数据中的表示方式)和内部格式(在编辑器中如何表示)之间存在分离。 您可能熟悉upcast和downcast函数 – 它们在这些格式之间进行转换(向上转换意味着将数据格式转换为内部格式)。
仅当处理数据字符串时 ,向上转换和向下转换才起作用,但如果使用editor#insertElement
插入内容则没有处理,因此没有向上转换。
插入
你有两个解决方案:
-
使用
editor#insertHtml
而不是editor#insertElement
。 您的小部件将在插入之前进行上传,因此它将以良好的格式插入。 -
自己处理upcasting(如果需要)并使用
editor#insertElement
。
初始化
这是小部件生命的第一步 – 必须插入。 第二是要初始化。
-
目前存在一个错误 (将在两周内修复),
insertHtml
方法插入的小部件未初始化。 所以,此时,在使用editor#insertHtml
插入小部件后,您需要调用:editor.widgets.checkWidgets()
-
如果使用
editor#insertElement
,则需要注意初始化窗口小部件。 要做那个电话:editor.widgets.initOn( element, 'widgetName' )
在两种情况下, 在插入后初始化窗口小部件 。
查看Widgets API以获取更多详细信息。
另请参阅我的答案, 解释如何知道元素是否是窗口小部件以及如何将它们插入编辑器 。