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
sMapper
。这意味着你需要以某种方式破解它
另外,通常情况下,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
。它不会被清除,并保持模型和可编辑视图之间的绑定。有可能吗