2014-10-29 61 views
2

我正在使用SignalR与后端服务器进行通信的一个javascript客户端。基本思想是,你可以在客户机上对服务器进行远程过程调用,反之亦然。我有一个适当的抽象调用不带任何参数如下服务器方法:使用应用向服务器发送多个参数

myInvoke: function (methodName, callback) { 
      proxy.invoke(methodName) 
       .done(function (result) { 
        $rootScope.$apply(function() { 
         if (callback) { 
          callback(result); 
         } 
        }); 
       }); 
     } 

的重要组成部分,是proxy.invoke(methodName)这需要服务器方法的名字作为一个字符串来调用。

代理还允许传递多个参数来调用。从SignalR documentation一些例子:

// one parameter 
contosoChatHubProxy.invoke('newContosoChatMessage', { UserName: userName, Message: message}) ... 

// two parameters 
contosoChatHubProxy.invoke('NewContosoChatMessage', userName, message) ... 

我想做到的是更多的东西像这样的地方参数表是任意数量的参数应该被转发到集线器:

myInvoke: function (methodName, args, callback) { 
      proxy.invoke(methodName, args)... 

我已经一直在阅读有关应用方法,但我的JavaScript是相当薄弱的,我一直没有能够拿出一个工作实现。

+0

的ARGS仅仅是一个JS对象,以便传递一个对象,并默认为空的对象,你应该在企业。你需要使用apply的唯一原因是你想要传递一些默认参数。 – 2014-10-29 18:11:52

+0

@GordonBockus我不明白如果我将10个参数传递给invoke,那么这将如何工作。它如何知道如何处理它们? – 2014-10-29 18:21:14

回答

2

忽略我以前的评论。我误读了您包含的SignalR文档。基本上我假设你总是可以传递一个单一的对象参数。它看起来像你可以完成你想做的事

请参阅jsbin以了解如何使用apply将参数从当前函数传递到invoke函数。

http://jsbin.com/juqanigulo/1/edit?html,js,console,output

+0

嘿不得不对你的代码做一些小的修改,以使其正常工作。回调不需要成为参数的一部分,因为它不需要传递给SignalR服务器,它用于处理从RPC调用返回的值。此外,我不得不做(代理,参数)而不是(空,参数),但之后,它做我想要的!非常感谢 :) – 2014-10-29 19:18:33

相关问题