サンプルプログラムに対してEmberclassNameBindingsが呼び出されていない

StackOverflow https://stackoverflow.com/questions/9383373

  •  28-10-2019
  •  | 
  •  

質問

クラス名のバインディングで問題が発生しています。これは、同じ jsfiddle コードです。バインディングが呼び出された回数をログに記録します。プロパティが変更されたときに呼び出されることはありません。

役に立ちましたか?

解決

ここでいくつか問題があるようです。主に、配列の内容が変更されたときにプロパティを再計算する場合は、配列プロパティ自体だけに依存することはできません。別の配列に設定されている場合にのみ変更が発生します。代わりにmyArray.@eachに依存している場合は、内容が変更されたときにプロパティが再計算されます。

次に、ハンドルバーのビュー宣言で空のビューテンプレートを指定しているため、スパンを含むテンプレートはレンダリングされません。 「HTML」を次のように変更します: ジェネラコディセタグプレ

スパンが表示されます。

最後に、Ember.run.sync()を実行するだけでは十分ではないようです。この背後にある理由についてははっきりしていませんが...計算されたプロパティは読み取られたときにのみ更新されます(オブザーバーはすぐに更新されます)。計算されたプロパティはビューによってのみ使用され、ビューはJSイベントループの後続の実行時にのみ更新される可能性があるため、計算されたプロパティは「部下」へのすべての変更に対して1回だけ再計算されると仮定します。タイムアウトを使用するようにコードを変更すると、正常に機能します。

これが jsfiddle と提案されたすべての変更です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top