gpt4 book ai didi

javascript - SignalR 新手,有没有一种方法可以在用户执行操作时向其他人广播,而不仅仅是在他们开始和结束时?

转载 作者:行者123 更新时间:2023-12-01 01:03:42 25 4
gpt4 key购买 nike

所以我想做的,并且我在这里做了一个小示例项目,是当用户编辑表中的单元格时,该单元格对该页面上的其他人禁用。都好。在这里,我将其设置为当用户进入单元格时,它对其他人禁用,并且在模糊/退出单元格时,它会清除。现在的问题是,如果一个人在牢房中,它会在其他人的屏幕上禁用。但是,如果有人刷新或新用户进入该页面,即使主用户仍在该单元格中,它也不会被禁用。 SignalR 有没有办法知道某人正在使用某个特定的单元格,而不仅仅是在他进入/退出该单元格时?

C# 代码:

    public class ChatHub : Hub
{
public void Send(string name, string message, bool boolean)
{
// Call the broadcastMessage method to update clients.
Clients.Others.broadcastMessage(name, message, boolean);
}
}

HTML 代码:

<table id="table">
<thead>
<tr>
<th>HeaderOne</th>
<th>HeaderTwo</th>
<th>HeaderThree</th>
</tr>
</thead>
<tbody>
@for(int i = 0; i < 3; i++)
{
<tr>
<td><input class="tdInput" /></td>
<td><input class="tdInput" /></td>
<td><input class="tdInput" /></td>
</tr>
}
</tbody>
</table>

Javascript代码:

        $(function () {
var conn = $.connection.chatHub;

conn.client.broadcastMessage = function (col, row, boolean) {
var cell = $("#table tr:eq(" + row + ") td:eq(" + col + ")");
cell.find("input").prop('disabled', boolean);
};

$.connection.hub.start().done(function () {
$(".tdInput").on('focus', function () {
var col = $(this).parent().index();
var row = $(this).closest('tr').index() + 1;
conn.server.send(col, row, true);
});
$(".tdInput").on('blur', function () {
var col = $(this).parent().index();
var row = $(this).closest('tr').index() + 1;
conn.server.send(col, row, false);
});
});
});

这是 Christoph 评论中选项 #2 的简单实现:

在connection.hub.start()中,添加:

conn.server.refresh();

在 JS 中:

conn.client.resendStatus = function () {
if ($('input:focus').length > 0) {
var focused = $(":focus");
var col = focused.parent().index();
var row = focused.closest('tr').index() + 1;
conn.server.send(col, row, true);
}
};

在中心:

public void Refresh()
{
Clients.Others.resendStatus();
}

最佳答案

在我看来,有两种可能的解决方案:

  1. 跟踪服务器上所有锁定的单元格,并在用户加载页面时将它们标记为锁定。
  2. 加载页面后,向所有客户端发送广播,告诉他们重新发送当前的编辑状态。

第二个选项更容易处理,因为您不需要任何状态跟踪,尤其是不需要超时。但是,加载页面后,您将有一段短暂的时间,其他人编辑的单元格将暂时解锁。

关于javascript - SignalR 新手,有没有一种方法可以在用户执行操作时向其他人广播,而不仅仅是在他们开始和结束时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com