1

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

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

a)有没有办法MapperDataController(例如事件)中获取?

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

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

更新(更多上下文) :基本上这个问题是在方法中使用模型的后续问题。DataProcessortoData

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

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

然而,尽管在我的另一个问题上警告它可能会变得太复杂,我最好从 DOM 转换(我仍然不同意),我决定让它更复杂一点,并从两者转换视图和模型。现在,我们来到了这个问题。

我的转换计划如下:

a) 将 转换viewFragmentmodelFragment。在这里,我希望以两种方式在它们之间进行所有位置转换。

b)在转换管道上传递,其中有一些用于处理元素和文本节点的通用框架,具有一组可扩展的“转换规则”对象,用于处理paragraphbold˛属性。

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

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

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

4

1 回答 1

2

不幸的是,您描述的问题非常复杂,对于 SO 答案来说可能过于广泛。这就是为什么我会保持简短的答案。

不幸的是,在您的情况下,我看不到使用DataControllers的简单合理的方法。Mapper这意味着您将需要以一种或另一种方式破解它。

此外,通常,Mapper仅在向下转换中使用,因此仅在您使用DataController#toView. 记在脑子里。Mapper加载数据时我们从来不需要使用。

我正在考虑破解它的最简单方法,但老实说,我认为您将不得不修改DataController或只准备一些代码,它与DataController#toView. 在代码中创建您自己的绑定实例Mapper并且不要清除绑定。

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

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

于 2018-04-27T14:54:37.087 回答