Итак, я пытаюсь сделать небольшой пример проекта, когда пользователь редактирует ячейку в таблице, эта ячейка отключается для всех остальных на этой странице.Все хорошо.Здесь я настроил его так, чтобы при входе пользователя в ячейку он отключался для всех остальных, а при размытии / выходе из ячейки он очищался.Теперь проблема в том, что если человек находится в камере, он отключается на экранах других людей.Но если кто-то обновляется или новый пользователь заходит на страницу, он не отключается, даже если основной пользователь все еще находится в этой ячейке.Есть ли способ с 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);
});
});
});
Вот простая реализация варианта # 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();
}