meiluowuchen
meiluowuchen
> _20250825_124626.mp4 > 理论上Cherry已经准备好支持多人编辑了(但需要先把 [#1405](https://github.com/Tencent/cherry-markdown/issues/1405) 支持上),通过 `setMarkdown(content:string, keepCursor = false)` 可以实现把服务端的内容更新到本地时不中断本地用户的编辑操作。大概流程如下: > > > 有一些功能需要业务方自行实现: > > 1. **第7步** 和 **第12步** 解决冲突的逻辑,比较典型的算法就是OT算法 > 2. 在客户端回显其他用户光标位置的交互(可以是回显带颜色、头像、用户信息的光标,也有可能是高亮所在段落,看业务的设计规范) > 3. 如果业务方通过websocket来实现,还需要额外实现实时保存(大概率在第7步实现下就好)、自动生成版本号、断网重连、弱网络优化等功能。 在收到websocket推送的时候,老是光标位置不对,请问要怎么处理
> 有可能是没做第12步导致本地更新服务器版本内容时产生了回档,另外更新内容用的cherryObj.setMarkdown() api有传第二个参数么? 传了,就是光标老是跳来跳去的
> 那光标跳来跳去的时候,文档内容有没有出现回档之类的情况? Cherry保持光标的做法是把旧内容和新内容做diff,根据diff计算光标更新后的位置(具体代码在[这里](https://github.com/Tencent/cherry-markdown/blob/dev/packages/cherry-markdown/src/utils/recount-pos.js#L25)),有可能是diff逻辑有问题,但现在提供的信息有限不太好判断。。。 并没有出现回档的问题,就是A在编辑的时候,导致B的鼠标一直在跳动
> setTimeout 您在setTimeout的时候,继续输入信息,你看看光标位置会不会发生改变
> _20250827_095312.mp4 > 额,还是不行哦。。。测试代码如下: > > ``` > cherryObj.setMarkdown("输入内容"); > // 在字符串随机位置插入字符 > function insertStr(soure, index, str) { > return soure.slice(0, index) + str + soure.slice(index); > } > setTimeout(()=>{cherryObj.setMarkdown(insertStr(cherryObj.getValue(),...
> > _20250827_095312.mp4 > > 额,还是不行哦。。。测试代码如下: > > ``` > > cherryObj.setMarkdown("输入内容"); > > // 在字符串随机位置插入字符 > > function insertStr(soure, index, str) { > > return soure.slice(0, index) + str...
>  > > 额,这不是“获取新输入的内容”的问题,是需要利用OT算法根据三个版本的内容拿到最终变更结果的问题,这三个版本内容分别为:V1 上一次服务器下发的版本;V2 本地文档最新内容;V3 当前服务器下发的版本。 通过 diff1 = V2 - V1; diff2 = V3 - V1; diffTarget = merge(diff1, diff2),获取最终版本 VTarget = V2.patch(diffTarget),然后 通过 cherry.setMarkdown(VTarget , 1)...
> https://github.com/yjs/yjs 可以参考这个哈(这个并非单纯的OT算法的实现,而是有自己的一套机制,但似乎据说性能反而更高) import 'cherry-markdown/dist/cherry-markdown.css'; import Cherry from 'cherry-markdown'; import * as Y from 'yjs'; import { WebsocketProvider } from 'y-websocket'; export default { name: 'CollaborativeEditor', props: { roomId: {...
> 确定这个content是符合预期的吗? 撤销有最大限制吗?
https://github.com/user-attachments/assets/3abc948a-20f4-44e6-b1ff-2a7d686b3664 我用谷歌浏览器同时打开了两个markdown,A切到B的时候,setMarkdown一次内容,B在切到A的时候,也进行了同样的操作,但是在切到A的时候,光标的位置始终都会发生改变,而且都是往后移动了2-3个字,有时候会更多