【问题标题】:Prevent ckeditor to fire set callback, when text updated by external source当外部源更新文本时,防止 ckeditor 触发 set 回调
【发布时间】:2020-05-08 19:51:07
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: javascript vue.js ckeditor pusher ckeditor5


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多