在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 hub和SignalR 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);
});
这将在控制台中为每个事件提供两行.