Knockout: `foreach`および` template`バインディングは、ビューモデル式を複数回評価します

作成日 2019年04月19日  ·  4コメント  ·  ソース: knockout/knockout

3.5.0回帰と比較してくださいwithバインディングがビューモデル式を複数回評価することが報告された場合

foreachバインディングは、ビューモデル式を複数回評価します。
https://jsfiddle.net/fastfasterfastest/y5pndfku/

templateバインディングは、ビューモデル式を複数回評価します。
https://jsfiddle.net/fastfasterfastest/vLt6zsjg/

最も参考になるコメント

そして、あなたはそれがバグであることに同意しますか?

私たちは確かに持つことはできません

  • with: expr
  • foreach: expr
  • template: { data: expr }

(多くの場合)ノックアウトが式を評価する方法に関しては、動作が異なりますよね? ノックアウトは、それらすべてのバインディング(および場合によっては他のバインディング)に対して式を1回評価することを保証するか、式が複数回評価される可能性があることを明示的に述べる必要があると思います。 後者の場合、#2455を再度開いて、バグではないと見なす必要があると思います。
組み込みのバインディングノックアウトが提供する動作が一貫していることが重要だと思います。

全てのコメント4件

これは3.0.0以降のケースのようです。

そして、あなたはそれがバグであることに同意しますか?

私たちは確かに持つことはできません

  • with: expr
  • foreach: expr
  • template: { data: expr }

(多くの場合)ノックアウトが式を評価する方法に関しては、動作が異なりますよね? ノックアウトは、それらすべてのバインディング(および場合によっては他のバインディング)に対して式を1回評価することを保証するか、式が複数回評価される可能性があることを明示的に述べる必要があると思います。 後者の場合、#2455を再度開いて、バグではないと見なす必要があると思います。
組み込みのバインディングノックアウトが提供する動作が一貫していることが重要だと思います。

これまで、バインディング値が評価される回数を最適化しようとしたことがないのは事実です。 3.5.0のテストを確認したところ、意図的に追加の評価を導入すると失敗する6つが見つかりました(以下を参照)。 ただし、これらはそれぞれ、評価の数をバインディングの更新のプロキシとしてのみ使用しています。 したがって、#2455を機能要求として再タグ付けすることは理にかなっていると思いますが、本当のバグではありません。

- Deferred bindings Should leave descendant nodes unchanged if the value is truthy and remains truthy when changed.
- Templating Data binding syntax should permit nested templates, and only bind inner templates once when using getBindingAccessors.
- Templating Data binding syntax should permit nested templates, and only bind inner templates once when using getBindings.
- Native template engine Anonymous templates may be nested.
- Binding: If Should leave descendant nodes unchanged if the value is truthy and remains truthy when changed.
- Binding: Using Should minimize binding updates with nested bindings.
このページは役に立ちましたか?
0 / 5 - 0 評価