0

所以我遇到了显示问题,想知道解决它的最佳方法。当 $.connection.hub.stateChanged 事件触发并且它处于断开连接状态时,我会向用户显示一个对话框,说连接丢失。但不幸的是,当我更改页面时,会触发此事件并在页面更改之前显示对话框,显示此错误几秒钟。

当我导航到其他按钮时,禁用 statechange 事件的最佳方法是什么?或者我可以在事件中进行一些检查,例如:

$.connection.hub.stateChanged(function (change) {
    if (change.newState === $.connection.connectionState.disconnected) {
        //Pseudo code:
        if (!pageIsChanging) {
            $('#lostConnectivityDiv').modal('show');
        }
    }
});

或者在集线器断开连接之前触发页面更改事件时是否有 jquery 事件?

4

1 回答 1

2

如果您尝试通知用户连接已丢失,则更好的路线是绑定到重新连接状态(下面的B)。

请参阅以下问题的答案:signalR 中的重新连接何时发生?为背景。

A) 对于 SignalR,只有一个点会发生真正的连接丢失,上面链接中的#4。当我说真正的连接丢失时,我的意思是 SignalR 连接停止尝试重新连接的点。

B) 但是,根据您希望如何实现通知,您也可以争辩说它应该只在重新连接时触发(意味着网络已关闭但连接正在尝试恢复)。

话虽如此,您可以通过任何一种方式实现您的通知。

A的实施:

var tryingToReconnect = false;

$.connection.hub.reconnecting(function() {
    tryingToReconnect = true;
});

$.connection.hub.reconnected(function() {
    tryingToReconnect = false;
});

$.connection.hub.disconnected(function() {
    if(tryingToReconnect) {
        notifyUserOfDisconnect(); // Your function to notify user
    }
});

B的实现:

$.connection.hub.reconnecting(function() {
    notifyUserOfDisconnect(); // Your function to notify user
});
于 2013-03-06T05:16:00.287 回答