我需要将事件附加到每个hub.client方法。 例如:
Hub.client.doSomething = function (e) {
aFunction(e);
};
Hub.client.doSomethingElse = function (e) {
aFunction(e);
};
有没有办法将aFunction()
附加到客户端级别的所有客户端方法,而不将函数放在每个客户端方法中?
答案 0 :(得分:1)
我不知道直接在集线器代理上提供此类回调,但您可以在received
对象上使用connection
回调。 (请参阅list of connection lifetime events和received definition)
请注意,每次通过连接接收数据时都会调用received
回调,这意味着,如果您有多个集线器,则当任何集线器向客户端发送数据时,将调用该集线器。这意味着,您必须检查回调中收到的数据并决定是否应该处理此数据(如果它属于给定的集线器,如果它是真实消息,或只是信号器内部消息)。
答案 1 :(得分:1)
使用一些JavaScript代码,您可以实现所需,无论SignalR提供什么样的开箱即用:
var extend = function (proxy, ex) {
var keys = Object.keys(proxy.client),
aop = function (p, k, f) {
var prev = p[k];
return function () {
f();
prev.apply(p, arguments);
};
};
keys.forEach(function (k) {
proxy.client[k] = aop(proxy.client, k, ex);
});
};
extend(Hub, aFunction);
在定义了真正的处理程序后,在所有集线器代理上调用extend
函数就足够了。
通过更多的努力,这些代码可以变得更加可靠和通用,但我认为它应该已经让你朝着正确的方向发展。