首页 文章

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

提问于
浏览
1

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

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

a)有没有办法从 DataController (例如一个事件)获得 Mapper

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

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

Update (with more context) :基本上这个问题是在 toData 方法中 DataProcessor 中使用model的后续行动 .

我从手头的任务开始,然后在解释我正在尝试使用与原始问题更相关的位置 .

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

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

我做转换的计划如下:

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

b)在转换管道上向下传递,其中有一些处理元素和文本节点的通用框架,以及一组可扩展的"conversion rule"对象,以处理 paragraphbold 属性 .

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

因此,例如, <p><b>text</b></p><p>...</p> 是数据处理器在模型和视图以及文档片段中的第一个_2836824之前获得位置的文本 . 当所有的魔法发生时,它将返回一个具有 {result:'[b]text[/b]\n\n', modelPos:'[par]...[/par]ˇ[par]...[/par]', viewPos: '<p><b>text</b></p>ˇ<p>...</p>'} 的物体,其中 ˇ 将是适当的位置物体指向的位置 .

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

1 回答

  • 2

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

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

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

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

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

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

相关问题