2016-04-06 3 views
3

В C# я бы подключить множество обработчиков к событию, например, так:SignalR несколько обработчиков событий на событие

event += firstEventHandler; 
event += secondEventHandler; 

но JavaScript с SignalR мы пишем:

$.connection.someHubName.client.someEventName = function (item) { 
    console.log("someMessage", item); 
}; 

Я создал оболочку, которая выглядит немного как это:

var signalRClient = { 
    start: function (callback) { 
     $.connection.hub.url = ajaxHttp + "/signalr"; 
     $.connection.hub.logging = true; 
     if ($.connection.hub && $.connection.hub.state === $.signalR.connectionState.disconnected) { 
      $.connection.hub.start({ jsonp: true, withCredentials: true, transport: ['webSockets', 'longPolling'] }).done(callback); 
     } else { 
      callback(); 
     } 
    }, 
    connection: $.connection 
} 

что я могу назвать так:

signalRClient.connection.somehub.client.someEvent = function (item) { 
    console.log("someMessage", item); 
}; 

signalRClient.start(function() { 
    signalRClient.connection.somehub.server.subscribe(someId); 
}); 

, но i, если я запускаю signalRClient в нескольких режимах (на одной и той же отображаемой странице), он может назначать одну функцию только одному событию. Я хочу иметь возможность назначить много функций для одного события.

Я прочитал: connect to signalr hub и SignalR client with multiple connections ++

Но я не думаю, что это хорошая идея, чтобы создать много подключений к одному концентратору для этой цели. Я также попытался бы избежать создания моего кода SignalR в макете и сделать все зависящие от него взгляды.

Есть ли доступное решение, чтобы я мог подключить много обработчиков событий к $.connection.somehub.client.event?

+0

вас все эти обработчики событий как функции правильные, тогда это просто: 'someEvent = function (item) {eventOne (item); eventTwo (item); eventThree (item);}' –

+0

«Я также попытался бы избежать создания моего кода SignalR в макете и сделать все виды зависимыми от этого ». - вот почему я не хочу делать то, что вы объясняете ... Вот почему signalRClient повторно используется ... –

+0

'' Я также попытался бы избежать создания моего кода SignalR в макете и сделать все представления зависимыми от этого «Я не понимаю этого. Вы можете быть более ясными. Чтобы сделать все виды зависимыми от этого, это должно быть частью макета. Если вы не хотите кодировать код макета в файле js и ставить ссылку в макете. –

ответ

3

Перепробовав много разных вещей, я сумел использовать .На (команда правильно .. это делается так:.

signalRClient.connection.somehub.on("someevent", function(item) { 
    console.log(item); 
}); 

signalRClient.connection.somehub.on("someevent", function (item) { 
    console.log(item); 
}); 

Это обеспечит две строки в консоли для каждого события

+0

Это хорошо. Документация SignalR не показывает этого. http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client –

+0

Это остро, но это довольно скрыто. Если вы посмотрите заголовок «Без сгенерированного прокси», он создает hubproxy и добавляет .on (event. Это то, что мне так долго нужно было понять, что я могу использовать это с сильно типизированной версией «С созданным прокси» их не проблема, кажется :) –

Смежные вопросы