sich also meine Klasse übernehmen ist so etwas wie diese:Aurelia - kein ModifyCollectionObserver für ein geschachteltes Array, auf das ein computedFrom-Decorator verweist?
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);
}
}
und mein HTML ist einfach:
<template>
<h3>myArray value: ${someProperty}</h3>
</template>
ich ein Problem habe, wo someProperty
nicht aktualisiert wird, wenn ich ein Element in schieben myObj.myArray
. Ich habe dies mit dem Debugger im someProperty
Getter verifiziert. Wenn this.myObj
ursprünglich in attached
eingestellt ist und der someProperty
Getter anschließend aufgerufen wird, sehe ich, dass myObj
ein SetterObserver
in this.__observers__
ist.
Aber ich sehe keine ModifyCollectionObserver
für myArray
in this.myObj.__observers__
(in der Tat, dass __observers__
Eigenschaft gar nicht existiert). Ich würde erwarten, dass es eine Art Beobachter auf dem Array geben würde, da es in meinem computedFrom
Decorator als eine Abhängigkeit spezifiziert ist.
Funktioniert '@computedFrom ('myObj.myArray.length')? –
@AshleyGrant Das funktioniert, danke! Wenn Sie das als Antwort lassen, werde ich es akzeptieren. Ich hatte jedoch gehofft, dass es einen weniger hacky Weg geben würde, dies zu tun. –
Ja, ohne Proxies zu benutzen, gibt es leider keinen weniger hacky Weg, den ich kenne. –