在 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);
});
但是如果我在多个 View (在同一个渲染页面上)中运行 signalRClient,它只能将一个函数分配给一个事件。我希望能够为一个事件分配多个功能。
我读过: connect to signalr hub和 SignalR client with multiple connections++
但我认为为此目的创建多个到同一个集线器的连接不是一个好主意。我也会尽量避免在布局中创建我的 SignalR 代码,并使所有 View 都依赖于此。
是否有可用的简单解决方案,以便我可以将许多事件处理程序挂接到 $.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 - 每个事件具有多个事件处理程序的 SignalR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36445583/