singler 同时编辑为什那么输入的内容为undefined,见图1,2.. 图3,4为前端配置图,图5为singler编辑类





singler 同时编辑为什那么输入的内容为undefined,见图1,2.. 图3,4为前端配置图,图5为singler编辑类





关注引自免费微信小程序:皆我百晓生
根据您提供的信息,您遇到的问题是在一个基于SignalR实现的多人实时协作编辑场景中,“Current Diagnosis:”显示为undefined。
首先,我们梳理一下整个流程:
前端使用signalR. HubConnectionBuilder构建了一个与服务器端editorHub的连接,并在连接建立成功后调用JoinEdit方法将当前用户添加至指定房间(由editorRoomId标识)。
当用户在前端编辑器(例如id为txtcurDiagnosisDetails的textarea)中输入内容时,触发input事件,进而调用UpdatePage方法将内容同步到服务器。
服务器端UpdatePage方法接收到内容更新后,会把内容保存到 _editingContent 变量,并通过 Clients.Group(pageId).SendAsync("UpdatePage", editingContent); 将更新发送给连接到同一房间的所有客户端。
客户端接收到来自服务器的更新消息后,会执行回调函数UpdatePage(userId, content),将接收到的content用于更新页面上的诊断详情内容。
然而,您提到的现象是“Current Diagnosis:”处显示为undefined,这可能的原因及解决步骤如下:
原因分析:
前端未正确获取或设置初始内容:在初始化页面时,前端没有正确地从服务器获取或本地存储加载初始的诊断内容,导致document.getElementById("txtcurDiagnosisDetails").value为空。
解决方案:确保在初始化页面时调用一个方法从服务器或本地存储加载诊断详情,并将其赋值给textarea元素。
SignalR消息传递异常:可能是由于服务器端UpdatePage方法没有正确地将内容广播到相应房间的客户端,或者是客户端没有正确处理接收到的消息。
解决方案:检查UpdatePage方法中是否确实有非空内容被发送出去,以及客户端的UpdatePage回调函数中的逻辑是否正确将content应用于界面展示。
编辑内容变量问题:如果用户在初次加载页面时没有输入任何内容就尝试查看已有的诊断详情,而服务器端的_editingContent并没有得到初始化,则可能会返回undefined。
解决方案:在JoinEdit方法中,如果页面存在已有内容,应从数据库或其他持久化存储读取并发送给新加入的客户端,确保其能显示正确的初始诊断详情。
建议您按照上述分析排查代码,尤其是关注在页面加载和内容更新时的数据流向。若前端在初始化时没有获取到诊断详情内容,您可以尝试修改前端代码,在连接建立之后立即调用一个服务端方法获取初始内容,例如:
connection.start().then(() => {
// 加入房间后立刻获取当前页面的诊断详情
connection.invoke("GetCurrentDiagnosis", editorRoomId).then((initialContent) => {
if (initialContent) {
document.getElementById("txtcurDiagnosisDetails").value = initialContent;
}
}).catch(err => console.error(err.toString()));
// ... 其他 SignalR 相关逻辑
});
同时,确保服务器端提供对应的GetCurrentDiagnosis方法或其他方式来提供初始内容。