Aurelia - 没有ModifyCollectionObserver用于由computedFrom装饰器引用的嵌套数组?

时间:2017-04-12 13:45:48

标签: aurelia aurelia-binding

所以让我们假设我的课程是这样的:

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 getter中的调试器验证了这一点。最初在this.myObj中设置attached并随后调用someProperty getter时,我会在myObj中看到SetterObserverthis.__observers__。< / p>

但是,我在ModifyCollectionObserver中看不到myArray的任何this.myObj.__observers__(事实上,__observers__属性甚至不存在)。我希望数组上会有某种观察者,因为它在我的computedFrom装饰器中被指定为依赖。

1 个答案:

答案 0 :(得分:3)

您可以将computedFrom装饰器更改为以下内容,并且事情将开始起作用:

 @computedFrom('myObj.myArray.length')

这是因为当您将项目推送到数组时,length属性会发生变化,Aurelia可以观察到这种变化。