当文本由外部源更新时,防止 ckeditor 触发设置回调

Prevent ckeditor to fire set callback, when text updated by external source

我正在开发一个实时 Vue 项目,它使用 ckeditor5 作为文本编辑器。 Pusher 是一个实时 API,它使用 websocket,将事件实时广播到其他 Pusher 实例。 This is Pusher

在 ckeditor 配置中,我传递了一个 set 回调。这个设置回调,在任何文本更改时触发,我用它来触发推送器事件,广播文本 对其他推送器实例的价值。

当他们这边的另一个 pusher 实例接收到事件时,问题就出现了,在处理它之后,Vue 反应性地更新了 DOM 中的文本值,从而触发了上面提到的 set 回调, 再次触发事件。在实时环境中,它会扰乱值更新,并以文本闪烁结束。

在回调中,我只得到了一个字符串值,找不到发起回调的原因,因此无法停止执行。

有没有办法阻止 ckeditor5 触发回调?

这可能是每个基于 websocket 的项目都存在的问题。

问题在于,当更改触发广播并且 Pusher 客户端接收并应用它时,它会随着客户端更改而广播。 当原始广播公司收到更改时,它无法确定它是否是自己的更改并再次应用。

在我尝试创建一个 ckeditor 插件以过滤掉已初始化为 ckeditor 实例本身的传入更改的几次失败尝试后,我决定制定一个解决方法来解决这个问题。

我创建了一个缓存,它在广播初始化的更改之前将它们存储几秒钟。当从 Pusher 客户端接收到更改时,只有在缓存中不存在更改时才会应用更改,因此它由另一个客户端初始化。

此解决方法在大多数情况下都有效,但在互联网连接速度非常慢且响应时间短(取决于缓存时间)的情况下仍然存在问题。