SignalR每个事件有多个事件处理程序

时间:2016-04-06 08:29:48

标签: 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

1 个答案:

答案 0 :(得分:7)

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

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

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

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