CKEditor5视图模型位置和范围转换

时间:2018-04-26 09:47:48

标签: ckeditor ckeditor5

engine/conversion/mapper类实现了我需要的功能,但是,我有一些关于如何最有效地获取/构建此对象的问题。

我希望Mapper对象处于某种状态,同时可以同时进行两种方式(模型查看和查看模型)转换。

a)有没有办法从Mapper获取DataController(例如某个活动)?

b)如果我必须建立自己的Mapper,那么最好的方法是什么?

我真的希望避免修改DataController,但是,我更希望找到一种最有可能与未来CKEditor5版本向前兼容的解决方案。

更新(有更多上下文): 基本上,这个问题是使用DataProcessor方法toData中的model进行跟进。

我从手头的任务开始,然后在解释我正在尝试对与原始问题更相关的位置做些什么。

所以,我需要将编辑器数据转换为BBCode(到目前为止一直很好),但我不知道HTML是什么(另一个插件会为bold和{{1设置模式等)。因此,我想将模型用于某些转换,例如,即使事实上我必须自己将属性转换为标记,因此从模型中转换文本节点似乎更容易。

然而,尽管我的另一个问题警告说它可能会变得太复杂而且我会更好地转换,例如从DOM(我仍然不同意),我决定使它更复杂,并从视图和模型转换。现在,我们来到这个问题。

我的转换计划如下:

a)将italic转换为viewFragment。在这里,我想以两种方式在它们之间进行所有位置转换。

b)向下传递转换管道,其中有一些处理元素和文本节点的通用框架,带有一组可扩展的“转换规则”对象,以处理modelFragment和{{1} }属性。

在b)中,每个“转换规则”可以决定从他们想要转换的内容(视图,模型,转换为视图到DOM或Markdown等),然后在文本中返回转换结果,模型位置指向之前要处理的下一个元素,以及视图中的相同位置。

因此,例如,paragraph是数据处理器在模型和视图以及文档片段中的第一个bold之前获得位置的文本。当所有的魔法发生时,它将返回一个具有<p><b>text</b></p><p>...</p>的对象,其中p将是适当位置对象指向的位置。

我希望它有点清楚,我正在尝试做什么,它有点长,因为我试图描述问题,所以你可以更好地判断我的解决方案,我试着应用它。

1 个答案:

答案 0 :(得分:2)

不幸的是,您所描述的问题非常复杂,可能过于宽泛而无法回答。这就是我保持答案简短的原因。

不幸的是,我没有看到在您的案例中使用DataController Mapper的简单合理方法。这意味着你需要以某种方式破解它。

此外,通常情况下,Mapper仅用于向下转换,因此仅在您执行DataController#toView时使用。记在脑子里。我们从来没有必要在加载数据时使用Mapper

我正在考虑最容易入侵的方法,但说实话,我认为您必须修改DataController或者只是准备一些与DataController#toView类似的代码。 。创建自己的Mapper实例,不要在代码中清除绑定。

或者,您可以创建自己的MyMapperMyDataController类来扩展CKE5类。 MyDataController可能会覆盖#mapper属性 - &gt; this.mapper = new MyMapper()。并且MyMapper可以在清除时发送某种事件。在该事件中,您可以复制映射器数据供您使用。

最后一个选项是在CKE5 Github上创建一个问题。我可以看到在DataController#toView中,清算可以移动到方法的开头。该更改不应有任何不利结果,映射器可以在下一次toView呼叫之前使用。如果您创建了该问题,我们可能会在内部讨论此更改,并可能实现它。