javascript – SignalR,每个事件有多个事件处理程序

在C#中,我会将许多处理程序挂钩到这样的事件:

event += firstEventHandler;
event += secondEventHandler;

但是我们用SignalR写的JavaScript:

$.connection.someHubName.client.someEventName = function (item) {
    console.log("someMessage", item);
};

我创建了一个看起来像这样的包装器:

var signalRClient = {
    start: function (callback) {
        $.connection.hub.url = ajaxHttp + "/signalr";
        $.connection.hub.logging = true;
        if ($.connection.hub && $.connection.hub.state === $.signalR.connectionState.disconnected) {
            $.connection.hub.start({ jsonp: true, withCredentials: true, transport: ['webSockets', 'longPolling'] }).done(callback);
        } else {
            callback();
        }
    },
    connection: $.connection
}

我可以这样打电话:

signalRClient.connection.somehub.client.someEvent = function (item) {
    console.log("someMessage", item);
};

signalRClient.start(function () { 
    signalRClient.connection.somehub.server.subscribe(someId);
});

但是如果我在多个视图中运行signalRClient(在同一个渲染页面上),它只能将一个函数分配给一个事件.我希望能够为一个事件分配许多功能.

我读过了:
connect to signalr hubSignalR client with multiple connections

但我不认为为此目的创建许多连接到同一个集线器是个好主意.我还试图避免在布局中创建我的SignalR代码并使所有视图依赖于此.

有没有一个简单的解决方案,以便我可以挂钩到$.connection.somehub.client.event的许多事件处理程序?

解决方法:

在尝试了许多不同的东西后,我设法使用.on(命令正确..它是这样完成的:

signalRClient.connection.somehub.on("someevent", function(item) {
    console.log(item);
});

signalRClient.connection.somehub.on("someevent", function (item) {
    console.log(item);
});

这将在控制台中为每个事件提供两行.

上一篇:javascript – 在Angular应用程序中使用Jasmine测试SignalR的问题


下一篇:c# – 使用Web API作为SignalR服务器并从Windows服务中使用它