7
在灰烬应用,假定有一个观察者或者手表的阵列,像这样的属性:Ember.js:折叠/推迟昂贵观察员或计算属性
topContributor: (function() {
// ... loop over articles (hence slow) ...
}).property('[email protected]')
更新articles
阵列,通过余烬例如,数据重复触发属性函数总共articles.length
次。
当所有更改结束并且刷新runloop时,是否有办法将更新合并为一个惰性更新?
'updateTopContributor'将被runloop调用一次,但我不明白,它是如何匹配更改结束?我猜想'articles'数组更新需要多个runloop吗?所以'updateTopContributor'会被多次调用......我可能会错过这里的东西,但我真的很了解这里的流程。你能解释我吗? –
当事件处理完成时,runloop的结束会发生。因此,如果数据存储的Ajax响应进入,则它会进行update-update-update(重复触发观察器),最后在返回到浏览器之前,它将刷新runloop。从概念上讲,所有这些与使用'setTimeout(...,1)'推迟调用相似。您可以在[Ember.run参考](http://emberjs.com/api/classes/Ember.run.html)和[此博客文章]中找到更多信息(http://www.thesoftwaresimpleton.com/blog/2012/04/03 /测试 - 灰烬和最runloop /)。 –
好吧,所以如果我明白了,流程是runLoop1开始 - > ajax响应 - > schedule updateTopContributor - > ajax响应结束 - > runLoop1结束 - > runLoop1刷新 - > runLoop2开始 - > updateTopContributor触发 - > runLoop2结束。第一个runloop正在运行,而ajax调用还没有返回? –