2012-04-19 66 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

是否有任何擔保src綁定將填充 backvisible屬性更改?

我真的不明白你爲什麼會關心SRC灰燼設置backVisible屬性前被設置。從你設計的例子來看,這兩個屬性在功能上看起來非常獨立。

但是,如果你仍然想強制SRC結合的視圖中的填充,可以隨時強制渲染。在Ember中,渲染通過運行循環延期。在您可以使runloop通過調用Ember.run.end()

有關運行循環的詳細信息立即執行,請訪問這個鏈接:http://blog.sproutcore.com/the-run-loop-part-1/

的博客文章是從SproutCore的天,但核心概念在Emberjs中依然如此。

0

您尋求的答案是(因爲首先它會更新所有Ember對象,以及後來的UI)。但是,我相信你的應用程序在沒有這個保證的情況下仍然可以正常工作,也就是說,因爲你使用Ember的綁定,即使App.backVisible會先更新,並且我甚至指的是生成的UI(img-tag)即使將它的src屬性設置爲「」(即使將它綁定爲abcd且b爲null),img標籤仍然沒問題(即使沒有「NPE」也是如此)。
幾毫秒後,Ember將更新src屬性以包含更新的值,並且圖像將被加載並顯示。
我認爲這是Ember強大的一面:國家在一個地方,一切都由它反映出來。如果綁定導致臨時不存在(儘管通常不會發生),那麼一切仍然有效。