如何使用信号从集线器调用特定功能R

问题描述:

我试图根据服务器接收的参数调用不同的JavaScript函数(从服务器到客户端!)。如何使用信号从集线器调用特定功能R

如何指定哪个函数具有哪个参数我想从服务器的客户端调用?

public class TestData 
{ 
    public string function{ get; set; } 
    public string element{ get; set; } 
} 

public class PerfHub : Hub 
{  
    public void Send(string id, string message) 
    { 
     if (!String.IsNullOrEmpty(id)) 
     { 
      List<TestData> testList = new List<TestData>(); 
      if (id == "1") 
      { 
       testList.Add(new TestData { function= "show", element= "grid" }); 
       Clients.All.sendInstructions(id, testList); 
      } 
      else if (id == "2") 
      { 
       testList.Add(new TestData { function= "hide", element= "grid" }); 
       Clients.All.sendInstructions(id, testList); 
      } 

我的一个客户端的JavaScript看起来像这样:

$(function() { 

    var instructions = $.connection.perfHub; 

    // receive instructions from the server 
    instructions.client.sendInstructions = function (id, message) { 


     var requestedFunction = message; 

     function show(parameters) { 
      $(parameters).show(); 
     } 

     show(); 

     function hide(parameters) { 
      $(parameters).show(); 
     } 

     hide(); 

目前我使用jQuery .hover方法,我似乎无法获得单击事件正常工作发送ID到服务器。

$.connection.hub.start().done(function() { 
     $('html *').hover(function() { 
      // Call the Send method on the hub. 
      instructions.server.send($(this).attr('id'), $(this).val()); 
      //$('#message').val($(this).attr('id')).focus(); 
     }, function() { 
      $('#message').val('').focus(); 
     }); 
    }); 
}); 

谢谢!

+0

有什么错误,你得到什么?究竟发生了什么? Clients.All.sendInstructions(id,testList);是在客户端上调用名为sendInstructions的函数的正确方法 – reckface

我使用动态密钥修复了它。

var instructions = $.connection.perfHub; 

    instructions.client.sendInstructions = function (id, message) { 

     if (id === "serverFunction") { 

      var ctx = { 
       showRoads: function (param) { $(param).show(); }, 
       hideRoads: function (param) { $(param).hide(); }, 
       shoresOn: function (param) { $(param).show(); }, 
       shoresOff: function (param) { $(param).hide(); }, 
       showTiles: function (param) { $(param).show(); }, 
       sideTiles: function (param) { $(param).hide(); } 
      } 

      for (var index = 0; index < message.length; ++index) { 
       ctx[message[index].function](message[index].element); 
      } 

     } 
    } 

    // Call the Send method on the hub. 
    $.connection.hub.start().done(function() { 
     $('html *').click(function() { 
      instructions.server.send($(this).attr('id'), $(this).val()); 
     }); 
    }); 

希望这来自于人们有益的,它肯定为我做的:)