2016-10-28 3 views
1

У меня есть массив, в котором есть некоторые объекты.Aurelia Наблюдать свойства в динамическом массиве объектов

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

Как файл загружены изменения прогресса в этом внешних Js одноплодного класса, который содержит .files. Мне нужно подписаться на этот массив и на свойство прогресса для каждого файла в массиве. Этот массив является динамическим, так как файлы добавляются. Мне нужно знать это и подписаться на них.

Вот что я имею в Aurelia:

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) 
    ); 
    } 
    } 

Я заметил, однако, что у меня нет доступа к this внутри addSplicesObservations(). Каков правильный способ сделать это в аурелии?

+0

Возможно, вам будет полезно посмотреть на агрегатор событий. Это система обмена сообщениями для aurelia. Действительно классный материал, который вы могли бы подключить в своей ситуации. – James

ответ

1

Я узнал, что если вы сделаете так, то this будет сохранен.

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

Обратите внимание, что установка подписки немного отличается. Теперь почему это отличает меня? Я не уверен.

+0

Чтобы выяснить, почему это имеет значение ... вы используете выражение lamba, которое, в свою очередь, в основном представляет собой короткий способ написания функции и, в вашем случае, переход в сращения. Таким образом, вы можете получить доступ к «этому» внутри функции, и он знает, что он связан с сращиваниями. – James