[英]Use jquery callback instead of RPC in SignalR hub
我需要从不同的地方多次订阅同一中心,例如:
function firstPlace(targetHub){
targetHub.client.onSomeEvent = function(data){
alert('hello from first place');
};
}
function secondPlace(targetHub){
targetHub.client.onSomeEvent = function(data){
alert('hello from second place');
};
}
firstPlace($.connection.clientHub);
secondPlace($.connection.clientHub);
我想具有基于回调的功能(如jquery回调 )。
function firstPlace(targetHub){
targetHub.client.onSomeEvent.add(function(data){
alert('hello from first place');
});
}
function secondPlace(targetHub){
targetHub.client.onSomeEvent.add(function(data){
alert('hello from second place');
});
}
firstPlace($.connection.clientHub);
secondPlace($.connection.clientHub);
我知道可以使用某些代理对象轻松实现它,但是也许有些我不了解的JavaScript魔术?
您可以使用我的EventAggregator代理,例如
function firstPlace() {
signalR.eventAggregator.subscribe(MyApp.SomeEvent, this.onSomeEvent, this);
}
function secondPlace() {
signalR.eventAggregator.subscribe(MyApp.SomeEvent, this.onSomeEvent, this);
}
当然,图书馆有更多的特色,但这就是其中之一
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
如果您不自我帮助,没有其他人会=)。 这是解决我的问题的代码:
signalR.FunctionToCallback = new function() {
self.MapCallback = function (sourceFunction, targetCallback) {
if (!sourceFunction) {
sourceFunction = function () {
sourceFunction.callbacks.fireWith(this, $.makeArray(arguments));
};
}
if (!sourceFunction.callbacks) {
sourceFunction.callbacks = $.Callbacks();
}
sourceFunction.callbacks.add(targetCallback);
return sourceFunction;
};
};
用法示例:
function firstPlace(targetHub){
targetHub.client.onSomeEvent = ko.FunctionToCallback.MapCallback(targetHub.client.onSomeEvent,function(data){
alert('hello from first place');
});
}
function secondPlace(targetHub){
targetHub.client.onSomeEvent = ko.FunctionToCallback.MapCallback(targetHub.client.onSomeEvent, function(data){
alert('hello from second place');
});
}
firstPlace($.connection.clientHub);
secondPlace($.connection.clientHub);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.