2016-10-28 3 views
1

内部にオブジェクトがいくつかある配列があります。ファイルとしてAureliaオブジェクトの動的配列のプロパティを観察します。

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

.filesが含まれています。この外部jsのシングルトンクラスでの進捗状況の変化をアップロードされます。この配列と配列内の各ファイルの進捗プロパティにサブスクライブする必要があります。この配列は動的なので、ファイルが追加されると、これを知り、それらを購読する必要があります。ここで

は、私がオーレリアに持っているものです。

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

私はaddSplicesObservations()の内側thisへのアクセスを持っていないことに気づいたのに。 aureliaでこれを行う適切な方法は何ですか?

+0

また、イベントアグリゲータを見ると便利かもしれません。これは基本的に、アウレリアのメッセージングシステムです。本当にあなたの状況でワイヤーアップすることができるものをクール。 – James

答えて

1

このようにすれば、thisが保存されることがわかりました。

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

サブスクライブの設定は少し異なります。なぜそれが異なっているのか、わからないのですか?

+0

なぜ違いがあるのか​​を明確にするために、lamba式を使用しています。これは、基本的には関数を書くための簡単な方法で、あなたの場合はスプライスを渡します。したがって、関数内で "this"にアクセスすることができ、それがスプライスに関連付けられていることがわかります。 – James

関連する問題