veröffentlicht werden Ich habe eine einzelne Seite App auf Aurelia basiert und ich versuche, es mit einem vorhandenen SignalR-Backend zu arbeiten. Ich habe den SignalR JavaScript-Client heruntergeladen und manuell in die Aurelia App integriert (d. H. Ich verwende keine Proxy-Datei). Ich kann mich mit dem SignalR-Hub verbinden und die Arrvive-Nachrichten in der Konsole sehen ... so weit so gut. Jetzt versuche ich, den Aurelia-Ereignisaggregator zu verwenden, damit beim Eintreffen einer neuen Hub-Nachricht ein Ereignis ausgelöst wird und alle Komponenten der App, die für dieses bestimmte Ereignis abonniert wurden, etwas Arbeit leisten. Das Problem ist, dass der SignalR-Ereignisrückruf nicht in der Lage ist, auf das Ereignisaggregatorobjekt zuzugreifen. Hier ist der Code, das Problem zu veranschaulichen:SignalR-Client-Ereignisse können nicht mit Aurelia Event Aggregator
//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);
}
}
Das Object Event Aggregator innerhalb der Callback-Funktion referenziert nicht definiert ist - ich nehme an, weil es nicht in den Anwendungsbereich der Klasse aufgerufen werden. Gibt es eine Möglichkeit, dies zu lösen? Wie gebe ich der Callback-Funktion Zugriff auf die Klasseneigenschaften (in meinem Beispiel dies.ea).
Danke für die Hilfe ... Das funktionierte perfekt! – CharlieB