0

I know that Ember.js defers binding changes. I'm wondering if Ember.js maintains any order when it notifies bindings of changes?

here's a very contrived example:

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

then some place else I do:

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

Is there any guarantee that the src binding will be filled in before the backVisible property changes?

4

2 回答 2

0

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

我真的不明白为什么你会关心在 Ember 设置backVisible属性之前设置src 。从您设计的示例中,这两个属性在功能上似乎非常独立。

但是,如果您仍想强制在视图中填充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)。

但是,我相信如果没有这个保证,您的应用程序仍然可以正常工作,即,因为您使用 Ember 的绑定,即使 App.backVisible 将首先更新,我什至是指生成的 UI(img-tag),img-即使将其 src 属性设置为“”,标记仍然可以正常工作(没有“NPE”,即使您绑定它 abcd 并且 b 为空)。
几毫秒后,Ember 将更新 src 属性以包含更新的值,并且图像将被加载并显示。
我认为这是 Ember 的强项之一:状态在一个地方,一切都由它反映。如果绑定暂时导致无处可去,一切仍然有效(尽管通常这不会发生)。

于 2012-12-09T23:57:16.897 回答