2016-09-28 4 views
3

Ich habe eine berechnete Eigenschaft genannt, die auf A und B abhängt:Berechnete Eigenschaft wird mehrmals in Aurelia

@computedFrom(A, B) 
    get property() { 
} 

Die Eigenschaft wird in Elemente verwendet, die repeat.for (5 Elemente insgesamt) hat:

<element repeat.for 1 to 5 elementProperty=$"{property}"> 
</element> 

Wenn Wert A ändert, würde ich erwarten, property() nur einmal genannt werden, und alle Elemente mit dem neuen Wert aktualisiert.

Aber property() ist mal aufgerufen. Warum?

Edit: Wenn ich dies tun ...

<template repeat.for 1 to 5> 
    <element elementProperty=$"{property}"></element> 
</template> 

... property() 6 mal auch genannt wird.

Soll das so funktionieren?

Antwort

2

Wenn Sie eine repeat.for haben, dann wird die source -Eigenschaft aller darin enthaltenen Bindungen für jedes untergeordnete Element aufgerufen, das gerendert wird. Dies ist normales Verhalten, da sie alle separate Bindungsinstanzen sind.

Wenn sich Ihre Bindungsquelle ändert, müssen alle Bindungsziele (in diesem Fall 6) aktualisiert werden, und zwar durch Aufrufen der source -Eigenschaft. Berechnete Bindungen neigen dazu, so einfache Berechnungen zu sein, dass dies im Allgemeinen kein Problem ist.

Wenn Ihre berechneten Bindungen rechenintensiv sind, sollten Sie möglicherweise eine Eigenschaftenbeobachtung für die abhängigen Eigenschaften in Erwägung ziehen und die berechnete Eigenschaft einfach festlegen, wenn sich eine davon ändert, anstatt die Bindungsengine beim Binden aufzurufen.

EDIT

Um zu klären: Das ist wirklich nichts mit computedFrom zu tun haben. Eine nicht berechnete Eigenschaft würde auch 6 Mal gelesen werden, aber es gibt keinen Getter, der den Debugger aktiviert, so dass Sie das nicht direkt sehen können.

Verwandte Themen