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

CKEditor5视图模型位置和范围转换,ckeditor,ckeditor5,Ckeditor,Ckeditor5,engine/conversion/mapper类实现了我需要的功能,但是,关于如何最有效地获取/构建这个对象,我有几个问题 我想让Mapper对象处于一种状态,同时可以进行两种方式(模型到视图和视图到模型)的转换 a) 是否有方法从数据控制器获取映射器(例如事件) b) 如果我必须构建自己的映射器,那么最好的方法是什么 我真的希望避免修改DataController,但是,我更喜欢一个最有可能与未来的CKEditor5版本向前兼容的解决方案 更新(具有更多上下文): 基本上,这个问题是在toD

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

我想让
Mapper
对象处于一种状态,同时可以进行两种方式(模型到视图和视图到模型)的转换

a) 是否有方法从
数据控制器
获取
映射器
(例如事件)

b) 如果我必须构建自己的
映射器
,那么最好的方法是什么

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

更新(具有更多上下文): 基本上,这个问题是在
toData
方法中使用
DataProcessor
的后续问题

我从手头的任务开始,在我解释了我想对与原始问题更相关的职位做些什么之后

因此,我需要将编辑器数据转换为BBCode(到目前为止还不错),但是我不知道HTML是什么(另一个插件会为
bold
italic
等设置模式)。因此,我想使用模型进行一些转换,例如,通过这种方式转换模型中的文本节点似乎更容易,即使我必须自己将属性转换为标记

然而,尽管在我的另一个问题上有警告说它可能会变得太复杂,我最好从DOM(我仍然不同意)转换,但我决定将它变得更加复杂,并从视图和模型转换。现在,我们来讨论这个问题

我的转换计划如下:

a) 将
viewFragment
转换为
modelFragment
。在这里,我想让他们之间的所有职位转换都以两种方式进行

b) 在转换管道上传递这两个属性,其中有一些处理元素和文本节点的通用框架,以及一组可扩展的“转换规则”对象,用于处理
段落
粗体
˛属性

在b)中,每个“转换规则”都可以根据要转换的内容(视图、模型、转换为视图到DOM或标记或其他内容)来决定,然后以文本形式返回转换结果、指向要处理的下一个元素之前的模型位置以及视图中的相同位置

因此,例如,
text

..

作为文本,数据处理器将在模型和视图以及文档片段中的第一个
p
之前获得一个位置。当所有的魔法发生时,它会返回一个对象,这个对象有
{result:'[b]text[/b]\n\n',modelPos:'[par].[par].[par].[par].[par].[par].[par].[par].[par].[par].[par]',viewPos:'text

.

'}
,其中
是对象指向的适当位置


我希望这有点清楚,我试图做的是,它有点长,因为我试图描述这个问题,所以你可以更好地判断我试图应用到它的解决方案。

不幸的是,你描述的问题相当复杂,可能太广泛了,无法给出这样的答案。这就是为什么我会保持简短的回答

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

另外,通常情况下,
Mapper
仅在下行转换中使用,因此仅在执行
DataController\toView
时使用。记住这一点。加载数据时,我们从未需要使用
Mapper

我正在考虑最简单的破解方法,但老实说,我认为您必须修改
DataController
,或者只需准备一段代码,它可以执行与
DataController\toView
类似的功能。创建自己的
Mapper
实例,不要清除代码中的绑定

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


最后一个选项是在CKE5 Github上创建问题。我可以看到,在
DataController#toView
中,可以将清除移到方法的开头。该更改不会产生有害的结果,映射器可以一直使用到下一次
toView
调用。如果您创建了问题,我们可能会在内部讨论此更改,并可能实施它。

从您的帖子中,我了解到您需要
Mapper
setData
/
getData
期间进行某种自定义数据处理?(因为这是用于使用
DataController
的内容。)是。我希望能够在数据处理器中转换视图/模型位置和范围。我只提到了
DataController
,因为它有一个
Mapper
,但是它被清除了,所以我假设我需要以某种方式创建自己的实例。我正在尝试更好地理解您的情况。是否要在转换之外使用
映射器
?从你输入的内容来看,我想是这样。我想知道您想在数据处理器中检查什么。正如您所注意到的,
DataController
中的
Mapper
是一种一次性的东西。使用后会被清除。它仅在数据管道转换期间有效。这是有道理的,因为在
EditingController
中还有一个
Mapper
。它不会被清除,并保持模型和可编辑视图之间的绑定。有可能吗