最近,一个similar question was raised on CKE5 GitHub . 问题是关于将JSON数据作为编辑器输出,但是您提出的主题也部分涵盖 .
(...)如何从数据处理器访问模型
直接在模型上运行存在一些问题和风险 . 这不是推荐的东西 . 它在链接的帖子中解释 .
(...)我的问题是如何将其转换为模型/ DocumentFragment
与直接在模型上运行相比,这是一种更好(风险更小)的方法 . 但是,我不得不问 - 为什么要转换模型?也许有更好的解决方案来解决你的问题?
要在视图和模型之间进行转换,必须使用 DataController#toView 和 DataController#toModel . DataController 实例位于 Editor#data . 要在数据处理器中使用它,数据处理器需要访问编辑器实例 .
我建议创建自己的编辑器类,扩展一个CKE5编辑器类 . 然后,在新的编辑器类构造函数中,覆盖数据处理器并传递编辑器实例 . 就像是:
class MyEditor extends ClassicEditor {
constructor() {
this.data.processor = new MyDataProcessor( this );
}
}
class MyDataProcessor() {
constructor( editor ) {
this._editor = editor;
}
toData( viewDocumentFragment ) {
const modelDocumentFragment = this._editor.data.toModel( viewDocumentFragment );
// ...
}
toView( modelData ) {
// ...
this._editor.data.toView( ... );
// ...
}
}
这些只是为了显示方向,而不是工作/测试样本 .
不过,我想知道为什么你坚持使用模型而不是视图来生成编辑器输出 .
BTW . 如果你继续这样实现它,整个过程将会有点愚蠢:) . 首先,您将获得模型数据,然后将其转换为视图(在数据处理器中),然后编辑器将获取视图数据并将其转换回模型:) . 所以也许你也会对覆盖 Editor#setData 方法感兴趣,所以不会发生不必要的转换 .