2017-04-12 5 views
2

このようなものです:Aurelia - computedFromデコレータによって参照されるネストされた配列のModifyCollectionObserverはありませんか?それでは、私のクラスを想定してみましょう

import { computedFrom } from 'aurelia-framework'; 

export class Test { 

    myObj; 

    @computedFrom('myObj.myArray') 
    get someProperty() { 
     debugger; 
     return JSON.stringify(this.myObj ? this.myObj.myArray : this.myObj); 
    } 

    attached() { 
     this.myObj = { 
      myArray: [] 
     }; 

     setTimeout(() => this.myObj.myArray.push('foo'), 500); 
    } 

} 

と私のHTMLだけである:

<template> 
    <h3>myArray value: ${someProperty}</h3> 
</template> 

私はに要素を押すとsomePropertyが更新されていない問題を持っていますmyObj.myArray。私はsomePropertyゲッターのデバッガでこれを確認しました。最初にthis.myObjattachedに設定され、その後にsomePropertyゲッターが呼び出されると、myObjSetterObserverthis.__observers__であることがわかります。

myArrayModifyCollectionObserverは、this.myObj.__observers__(実際には、__observers__のプロパティは存在しません)では表示されません。私はcomputedFromデコレータの依存関係として指定されているため、アレイ上に何らかのオブザーバが存在することを期待しています。あなたは、次の物事に自分のcomputedFromデコレータを変更することができます

+1

'@computedFrom( 'myObj.myArray.length')'は動作しますか? –

+0

@AshleyGrantそれはうまくいく、ありがとう!それを答えとして残しておけば、私はそれを受け入れます。しかし、私はこれを行うためのあまりハックのない方法があることを望んでいた。 –

+0

ええ、プロキシを使用しないと、残念なことに私が知っているほどハッキリではありません。 –

答えて

3

は、作業を開始します:

@computedFrom('myObj.myArray.length') 

あなたは配列にしてアイテムを押すとlengthプロパティが変更されますので、これは、とアウレリアは、その変化を観察することができます。

関連する問題