繁体   English   中英

在SignalR集线器中使用jquery回调代替RPC

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM