2017-04-12 16 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.myObj最初在attached集和someProperty吸氣隨後被調用時,我看到myObjthis.__observers__一個SetterObserver

但是,我沒有看到任何ModifyCollectionObservermyArraythis.myObj.__observers__(事實上,即__observers__屬性不存在)。我期望在數組中會有某種觀察者,因爲它在我的computedFrom裝飾器中被指定爲依賴項。

+1

是否'@computedFrom( 'myObj.myArray.length')'工作? –

+0

@AshleyGrant這確實有用,謝謝!如果您將其作爲答案離開,我會接受它。但是,我希望能做到這一點的方式不那麼簡單。 –

+0

呀,不使用代理服務器,沒有,我所知道的,不幸的是少哈克的方式。 –

回答

3

您可以computedFrom裝飾更改爲以下事情會開始工作:

@computedFrom('myObj.myArray.length') 

這是因爲length屬性將當你到陣推的項目發生變化,奧裏利亞可以觀察到的變化。