如何单向处理 CKEditor 5 中视图的 html 数据?

How to one-way process html data for the view in CKEditor 5?

在作者的 CKEditor 视图中,我需要将 links 更改为文件,以便附加作者的会话 ID。然而,在普通用户的实际内容中,特定的用户 ID 是自动添加的。因此,作者 ID 不得保存在作者使用 CKEditor 编辑的内容中,它只需要在他编辑时出现在视图中,以便他可以看到例如图像。保存时 'clean' link 没有任何 ID 需要保存。

在 CKEditor 5 中,似乎有更多的可能性来实现这种单向数据过滤,例如

但是我找不到一个很好的例子,也找不到一个简单干净的方法来实现这个。 (我的尝试变得非常复杂并且无法正常工作......)我猜这是一个很常见的用例所以也许我忽略了一些东西。有好的解决办法吗?


更新 1:
示例 links 为:


更新二:
当我进一步使用 CKEditor 时,我遇到了更多这样的事情,从开发人员的角度来看,这些事情非常令人不快。这似乎是设计使然,因为引用来自贡献者 'fredck':

[...] we want to bring the editor out of the "HTML Editor" thing, making it the perfect soluting for "quality content writing".

这隐含地意味着,如果您是一名开发人员并且您有高级用户使用高级用例(如果您使用 Whosebug,则可能是这种情况),那么您不是目标受众,不应在第一名.

例如,您可以在此处的讨论中阅读更多相关信息(这也是关于另一个功能的):https://github.com/ckeditor/ckeditor5/issues/592

要修改下载的链接,您可以编写自定义向下转换转换器,它会修改获得的 href。 这是一个工作示例,它将当前时间戳添加到 URLs: https://codepen.io/msamsel/pen/zVMvZN?editors=1010

editor.conversion.for( 'dataDowncast' ).add( dispatcher => {
    dispatcher.on(
        'attribute:linkHref',
        ( evt, data, conversionApi ) => {
            if ( !conversionApi.consumable.test( data.item, 'attribute:linkHref' ) ) {
                return;
            }

            if ( data.attributeNewValue ) {
                data.attributeNewValue += `#time=${ ( new Date() ).getTime() }`;
            }
        },
        { priority: 'high' }
    );
} );

简单介绍一下它是如何工作的。
创建的侦听器对 attribute:linkHref 更改做出反应(它仅在无论如何获取数据时触发,因为它是 dataDowncast)。在实际的 Link 插件创建输出之前,侦听器以 'high' 优先级触发以更改 URL。首先检查给定的模型元素是否未被消耗,但没有消耗它,因为我们想保留将再次处理同一元素的本机行为。属性值用时间戳扩展,完成此侦听器。之后,本机行为被触发,具有 'normal' 优先级。

使用了类似的方法来实现 custom link attributes。可以在此处找到有关调度程序和转换过程的更多信息: