サンプルプログラムに対してEmberclassNameBindingsが呼び出されていない
-
28-10-2019 - |
質問
クラス名のバインディングで問題が発生しています。これは、同じ jsfiddle コードです。バインディングが呼び出された回数をログに記録します。プロパティが変更されたときに呼び出されることはありません。
解決
ここでいくつか問題があるようです。主に、配列の内容が変更されたときにプロパティを再計算する場合は、配列プロパティ自体だけに依存することはできません。別の配列に設定されている場合にのみ変更が発生します。代わりにmyArray.@each
に依存している場合は、内容が変更されたときにプロパティが再計算されます。
次に、ハンドルバーのビュー宣言で空のビューテンプレートを指定しているため、スパンを含むテンプレートはレンダリングされません。 「HTML」を次のように変更します: ジェネラコディセタグプレ
スパンが表示されます。
最後に、Ember.run.sync()
を実行するだけでは十分ではないようです。この背後にある理由についてははっきりしていませんが...計算されたプロパティは読み取られたときにのみ更新されます(オブザーバーはすぐに更新されます)。計算されたプロパティはビューによってのみ使用され、ビューはJSイベントループの後続の実行時にのみ更新される可能性があるため、計算されたプロパティは「部下」へのすべての変更に対して1回だけ再計算されると仮定します。タイムアウトを使用するようにコードを変更すると、正常に機能します。
これが
所属していません StackOverflow