2016-09-28 1 views
3

に複数回呼び出される。計算さプロパティは、IはA及びBに依存して計算さ特性を有するアウレリア

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

プロパティがrepeat.for(合計5つの要素)を有する素子に使用される:

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

値がAに変更された場合、property()となります。となり、すべての要素が新しい値で更新されます。

となります。 なぜですか?

編集:私はこれを行うと ...

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

... property()はあまりにも6回呼ばれます。

これはどのように動作するのですか?

答えて

2

repeat.forがある場合、レンダリングされる各子要素に対して、その中のすべてのバインディングのsourceプロパティが呼び出されます。すべてが別々のバインディングインスタンスであるため、これは正常な動作です。

バインディングソースが変更された場合、すべてのバインディングターゲット(この場合は6)を更新する必要があります。これはsourceプロパティを呼び出すことによって行われます。計算されたバインディングは、これが一般に問題ではないような単純な計算である傾向があります。

計算されたバインディングの計算コストが高い場合は、バインディングエンジンがバインド時に呼び出すのではなく、依存プロパティのプロパティオブザーバを使用して、それらのいずれかが変更されたときに計算プロパティを設定することを検討します。

EDIT

明確にする:これは本当にcomputedFromとは何の関係もありません。計算されていないプロパティも6回読み込まれますが、デバッガをフックするゲッターはないので、直接見ることはできません。

関連する問題