ember.js绑定传播顺序

时间:2012-04-19 20:17:07

标签: 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)

是否可以保证在backVisible属性更改之前填充src绑定?

2 个答案:

答案 0 :(得分:0)

  

是否可以保证之前将填充src绑定   backVisible属性改变了吗?

我真的不明白为什么你会关心在Ember设置 backVisible 属性之前设置 src 。从你人为的例子来看,这两个属性在功能上看起来非常独立。

但是,如果您仍想强制在视图中填充 src 绑定,则可以始终强制渲染。在Ember中,渲染通过运行循环延迟。您可以通过调用 Ember.run.end()

立即执行runloop

有关运行循环的更多信息,请尝试以下链接:http://blog.sproutcore.com/the-run-loop-part-1/

博客文章来自Sproutcore日,但核心概念在Emberjs仍然是相同的。

答案 1 :(得分:0)

您寻求的答案是(因为首先它会更新所有Ember对象,然后更新UI)。

然而,我相信你的应用程序将在没有这个保证的情况下工作正常,即,因为你使用Ember的绑定,即使App.backVisible将首先更新,并且我甚至意味着生成的UI(img-tag),即使将src属性设置为“”(即使你将它绑定为abcd而b为空,也没有“NPE”),img-tag仍然可以正常使用。
几毫秒之后,Ember将更新src属性以包含更新的值,并且图像将被加载并显示。
我认为这是Ember强大的一面:国家在一个地方,一切都由它反映出来。如果绑定导致暂时没有(尽管通常不会发生这种情况),一切仍然有效。