0

Ember.js がバインディングの変更を延期することは知っています。Ember.js がバインディングに変更を通知するときに何らかの順序を維持するかどうか疑問に思っていますか?

これは非常に不自然な例です:

{{#if App.backVisible}}
    <img {{bindAttr src=App.selectedPerson.avatar}} />
{{else}}
    name: {{App.selectedPerson.fullName}}
{{/if}}

それから私がする他の場所:

App.set("selectedPerson", someOtherPerson)
App.set("backVisible", true)

backVisible プロパティが変更される前に src バインディングが埋められるという保証はありますか?

4

2 に答える 2

0

backVisibleプロパティが変更される前にsrcバインディングが入力されるという保証はありますか?

EmberがbackVisibleプロパティを設定する前にsrcが設定されることを気にする理由がよくわかりません。あなたの考案した例から、2つのプロパティは機能的に非常に独立しているように見えます。

ただし、それでもsrcバインディングを強制的にビューに入力する場合は、いつでも強制的にレンダリングできます。Emberでは、レンダリングは実行ループを通じて延期されます。Ember.run.end()を呼び出すことにより、runloopをすぐに実行させることができます。

実行ループの詳細については、次のリンクを試してください:http: //blog.sproutcore.com/the-run-loop-part-1/

ブログ投稿はSproutcore時代のものですが、コアコンセプトはEmberjsでも同じです。

于 2012-04-19T20:39:51.693 に答える
0

あなたが求める答えはイエスです(最初にすべての Ember オブジェクトを更新し、後で UI を更新するため)。

ただし、App.backVisible が最初に更新されても、Ember のバインディングを使用しているため、この保証がなくてもアプリは正常に動作すると思います。つまり、生成された UI (img-tag)、img- tag は、src 属性が "" に設定されていても問題ありません (abcd をバインドし、b が null であっても、"NPE" はありません)。
数ミリ秒後、Ember は更新された値を含むように src 属性を更新し、画像が読み込まれて表示されます。
これは Ember の強みの 1 つだと思います。つまり、状態が 1 か所にあり、すべてがそこに反映されるということです。バインディングが一時的にどこにもない場合でも、すべてが機能します (通常、これは発生しません)。

于 2012-12-09T23:57:16.897 に答える