У меня есть одностраничное приложение на основе Aurelia, и я пытаюсь заставить его работать с существующим бэкэндом SignalR. Я загрузил javascript-клиент SignalR и интегрировал его с приложением Aurelia вручную (т. Е. Я не использую прокси-файл). Я могу подключиться к концентратору SignalR и видеть приходящие сообщения в консоли ... пока все хорошо. Теперь я пытаюсь использовать агрегатор событий Aurelia, так что, когда приходит новое сообщение хаба, событие запускается, и любые компоненты приложения, подписанные на это конкретное событие, будут выполнять определенную работу. Проблема в том, что обратный вызов события SignalR, похоже, не может получить доступ к объекту агрегатора событий. Вот код, чтобы проиллюстрировать этот вопрос:Не удается получить события клиента SignalR, опубликованные с помощью агрегатора событий Aurelia
//Import statements omitted for brevity
@inject (EventAggregator)
export class MyService{
constructor(eventAggregator) {
this.ea = eventAggregator;
this.connection = $.hubConnection("http://localhost:8080/signalr", { useDefaultPath: false });
this.hub = this.connection.createHubProxy("myHub");
//Register a callback function to fire when a new hub message arrives
this.hub.on("sendMessage", this.processHubMessage);
//No issues so far - all this constructor code works fine
}
processHubMessage(message) {
// This doesn't work - this.ea is undefined in the scope of this function
this.ea.publish('deviceStatusUpdate', message);
}
}
событие объекта агрегатора ссылка внутри функции обратного вызова не определен - я предполагаю, потому что это не вызывается в рамках класса. Есть ли способ разрешить это? Как предоставить функции обратного вызова доступ к свойствам класса (this.ea в моем примере).
Спасибо за помощь ... Это работало отлично! – CharlieB