繁体   English   中英

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

[英]CKEditor5 view-model position and range conversion

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

我想在同时进行两种方式(从模型到视图以及从视图到模型)转换的状态下,使Mapper对象处于一种状态。

a)有没有办法从DataController获取Mapper (例如事件)?

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

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

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

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

因此,我需要将编辑器数据转换为BBCode(到目前为止非常好),但是我不知道HTML适用于什么(另一个插件会将模式设置为bolditalic等)。 因此,我想将模型用于某些转换,例如,即使我必须自己将属性转换为标签,从这种方式转换文本节点似乎也很容易。

但是,尽管警告了我另一个问题,即它可能太复杂了,我最好还是从DOM(我仍然不同意)进行转换,但我还是决定使其变得更加复杂,并从两者进行转换。视图和模型。 现在,我们解决了这个问题。

我进行转换的计划如下:

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

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

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

因此,例如, <p><b>text</b></p><p>...</p>是文本,数据处理器将在模型和视图中的第一个p之前获得位置加上文档片段。 并且当所有魔术发生时,它将返回一个对象,该对象具有{result:'[b]text[/b]\\n\\n', modelPos:'[par]...[/par]ˇ[par]...[/par]', viewPos: '<p><b>text</b></p>ˇ<p>...</p>'} ,其中ˇ其中的适当位置对象点。

我希望它很清楚,我正在尝试做的事情,花了很长时间,因为我试图描述问题,所以您可以更好地判断我尝试应用的解决方案。

不幸的是,您描述的问题非常复杂,可能对于SO答案而言太宽泛了。 这就是为什么我将答案简短的原因。

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

同样,通常, Mapper仅用于向下转换,因此仅当您执行DataController#toView 记住这一点。 加载数据时,我们从不需要使用Mapper

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

另外,您可以创建自己的MyMapperMyDataController类,以扩展CKE5类。 MyDataController可以覆盖#mapper属性-> this.mapper = new MyMapper() MyMapper被清除时,它可以发送某种事件。 在那种情况下,您可以复制映射器数据供您使用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM