2012-04-19 7 views
0

Ember.jsがバインディングの変更を延期することがわかりました。 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) 

はSRC結合がbackVisibleプロパティの変更の前に入力されますという保証はありますか?

答えて

0

backVisibleプロパティが変更される前にsrcバインディングが書き込まれる保証はありますか?

私はあなたがエンバーはbackVisibleプロパティを設定する前に、約SRCが設定されている気にする理由は本当に理解しません。あなたの考案した例から、2つのプロパティは機能的に非常に独立しているようです。あなたはまだビューに充填されるように結合SRCを強制したい場合は

しかし、あなたは常にレンダリングを強制することができます。 Emberでは、レンダリングは実行ループによって遅延されます。あなたが実行ループを実行ループの詳細情報についてはEmber.run.end()

を呼び出すことで、すぐに実行させることができ、このリンクを試してください:http://blog.sproutcore.com/the-run-loop-part-1/

ブログ記事がSproutcore日からですが、 Emberjsのコアコンセプトはまだ同じです。

0

答えははいです(最初からすべてのEmberオブジェクトとそれ以降のUIが更新されるため)。

しかし、App.backVisibleが最初に更新され、それによって生成されたUI(img-tag)を意味する場合でも、Emberのバインディングを使用しているため、 src属性が ""に設定されていても、img-tagは正常です(abcdをバインドしてもbがnullの場合でも "NPE"はありません)。
数ミリ秒後、Emberはsrc属性を更新された値を含むように更新し、イメージがロードされて表示されます。
これはEmberの強力な側面の1つだと思います。状態は1つの場所にあり、すべてがそれに反映されます。バインディングが一時的にどこにもつながっていない場合は、すべてが機能します(通常はこれは起こりませんが)。