2016-10-28 4 views
1

Ich habe ein Array, das einige Objekte innerhalb von ihm hat.Aurelia Beachten Sie Eigenschaften in einem dynamischen Array von Objekten

this.mediaService.media.files = [ 
    { id: 1, progress: 15 }, 
    { id: 2, progress: 0 } 
] 

Als eine Datei mit der Fortschritt Änderungen in dieser externen js Singleton-Klasse, die .files enthält hochgeladen. Ich muss dieses Array und die Eigenschaft des Fortschritts für jede Datei im Array abonnieren. Dieses Array ist dynamisch, so dass Dateien hinzugefügt werden, die ich in der Lage sein muss, dies zu wissen und sie zu abonnieren. Hier

ist, was ich in aurelia haben:

bind() { 
    this.observerLocator 
     .getArrayObserver(this.mediaApi.media.files) 
     .subscribe(this.addSplicesObservations); 
    } 

    addSplicesObservations(splices) { 
    for (let i = 0; i < splices.length; i++) { 
     this.subscriptions.push(this.observerLocator 
     .getObserver(this.mediaApi.media.files[splices[i].index], 'progress') 
     .subscribe(this.onChange) 
    ); 
    } 
    } 

Ich bemerkte aber, dass ich keinen Zugriff auf this innerhalb von addSplicesObservations() haben. Was ist der richtige Weg, dies in Aurelia zu tun?

+0

Es könnte auch hilfreich sein für Sie bei der Veranstaltung Aggregator zu suchen. Es ist im Grunde ein Nachrichtensystem für Aurelia. Wirklich coole Sachen, die du wahrscheinlich in deiner Situation verkabeln könntest. – James

Antwort

1

ich gelernt, wenn Sie es auf diese Weise tun die this erhalten bleiben.

bind() { 
    this.observerLocator 
     .getArrayObserver(this.mediaApi.media.files) 
     .subscribe((splices) => { 
     this.addSplicesObservations(splices); }); 
} 

Beachten Sie, dass das Abonnement-Setup ein wenig anders ist. Warum macht es das anders? Ich bin mir nicht sicher.

+0

Um zu klären, warum es einen Unterschied macht ... Sie einen lamba Ausdruck verwenden, was wiederum zu schreiben, eine Funktion und in Ihrem Fall im Grunde ein kurzer Weg ist, in Spleißstellen vorbei. Sie können also innerhalb der Funktion auf "dieses" zugreifen und wissen, dass es mit Spleißen korreliert ist. – James

Verwandte Themen