我知道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绑定?
答案 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强大的一面:国家在一个地方,一切都由它反映出来。如果绑定导致暂时没有(尽管通常不会发生这种情况),一切仍然有效。