2012-04-19 42 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强大的一面:国家在一个地方,一切都由它反映出来。如果绑定导致临时不存在(尽管通常不会发生),那么一切仍然有效。