2017-04-12 20 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属性将当你到阵推的项目发生变化,奥里利亚可以观察到的变化。