ckeditor - CKEditor5 视图模型位置和范围转换
问题描述
该类engine/conversion/mapper
实现了我需要的功能,但是,我对如何最有效地获取/构建此对象有一些疑问。
我想让Mapper
对象处于两种方式(模型到视图和视图到模型)同时可以转换的状态。
a)有没有办法Mapper
从DataController
(例如事件)中获取?
b)如果我必须自己构建Mapper
,那么最好的方法是什么?
我真的很想避免修改DataController
. 但是,我更喜欢一个最有可能与未来的 CKEditor5 版本向前兼容的解决方案。
更新(更多上下文) :基本上这个问题是在方法中使用模型的后续问题。DataProcessor
toData
我从手头的任务开始,在我解释了我到底想对与原始问题更相关的职位做什么之后。
所以,我需要将编辑器数据转换为 BBCode(到目前为止一切顺利),但是我不知道 HTML 是什么(另一个插件会为等设置架构bold
)italic
。因此,我想使用模型进行一些转换,例如,即使我必须自己将属性转换为标签,通过这种方式转换模型中的文本节点似乎更容易。
然而,尽管在我的另一个问题上警告它可能会变得太复杂,我最好从 DOM 转换(我仍然不同意),我决定让它更复杂一点,并从两者转换视图和模型。现在,我们来到了这个问题。
我的转换计划如下:
a) 将 转换viewFragment
为modelFragment
。在这里,我希望以两种方式在它们之间进行所有位置转换。
b)在转换管道上传递,其中有一些用于处理元素和文本节点的通用框架,具有一组可扩展的“转换规则”对象,用于处理paragraph
和bold
˛属性。
在 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>'}
,ˇ
合适的位置对象指向的位置。
我希望有点清楚,我正在尝试做什么,它有点长,因为我试图描述这个问题,所以你可以更好地判断我尝试应用于它的解决方案。
解决方案
不幸的是,您描述的问题非常复杂,对于 SO 答案来说可能过于广泛。这就是为什么我会保持简短的答案。
不幸的是,在您的情况下,我看不到使用DataController
s的简单合理的方法。Mapper
这意味着您将需要以一种或另一种方式破解它。
此外,通常,Mapper
仅在向下转换中使用,因此仅在您使用DataController#toView
. 记在脑子里。Mapper
加载数据时我们从来不需要使用。
我正在考虑破解它的最简单方法,但老实说,我认为您将不得不修改DataController
或只准备一些代码,它与DataController#toView
. 在代码中创建您自己的绑定实例Mapper
并且不要清除绑定。
或者,您可以创建自己的MyMapper
类MyDataController
来扩展 CKE5 类。MyDataController
可以覆盖#mapper
属性 -> this.mapper = new MyMapper()
。并且MyMapper
可以在清除时发送某种事件。在该事件中,您可以复制映射器数据以供您使用。
最后一个选项是在 CKE5 Github 上创建一个问题。我可以看到在DataController#toView
清理中可以移动到方法的开头。该更改不应产生有害结果,并且映射器可以在下一次toView
调用之前使用。如果您创建问题,我们可能会在内部讨论此更改并可能实施它。
推荐阅读
- git - 如何回到 github 上的旧存储库视图?
- amazon-web-services - S3 存储桶的速率限制
- amazon-web-services - AWS Athena 选择查询以从状态列中获取错误代码
- r - 如何使用 print 或 cat 缩进多行输出(例如摘要)的输出并保持列对齐?
- node.js - 无法从节点中的 jsonwebtoken 获取有效负载数据
- javascript - Primefaces DatePicker 不会在窗口旋转时更新其位置
- android-studio - 为什么在 dart 中使用 Future 关键字时 android studio 自动完成停止
- c# - Serilog 使用 Microsoft ILogger - 从 .NET Core 中的一个代码记录到不同的位置
- reactjs - 将 mxGraph 与 React 一起使用的基本问题
- javascript - 当我使用 target = _self 时,我只会在 Google 应用程序脚本中看到白页