Ember.js 如何在当前运行循环结束时运行某些内容?

Ember.js 如何在当前运行循环结束时运行某些内容?,ember.js,Ember.js,我想推迟一个操作,直到所有绑定都已刷新并且当前runloop已完成。如何做到这一点?使用以下方法: 这里,queue是运行循环队列(例如'actions'),而callback是您想要执行的函数。例如: Ember.run.schedule('actions', function() { console.log('I run at the end of the current runloop'); }); 与此相关的是,为了防止函数多次运行,请使用(您可能还看到它被称为schedul

我想推迟一个操作,直到所有绑定都已刷新并且当前runloop已完成。如何做到这一点?

使用以下方法:

这里,
queue
是运行循环队列(例如
'actions'
),而
callback
是您想要执行的函数。例如:

 Ember.run.schedule('actions', function() {
   console.log('I run at the end of the current runloop');
 });
与此相关的是,为了防止函数多次运行,请使用(您可能还看到它被称为
scheduleOnce
):

这将在
'actions'
队列中运行回调


(更新;感谢@machty的更正!)

我认为这里的术语有点模糊。。。在运行循环体系结构中,您编写的代码介于
开始
结束
之间,然后是所有内部运行循环代码,用于清除所有计划的操作。对我来说,将post-
end
flushing阶段称为run循环更有意义,因为它接受您刚才运行的内容,并反复循环计划的操作,直到刷新队列。如果我们都使用相同的术语,我认为Ember.run.schedule没有必要将操作延迟到所有绑定刷新(这恰好发生在
同步
队列中)之后;相反,它只是将操作安排在当前运行循环期间进行,以及所有其他绑定同步等等。如果您特别希望在绑定同步之后发生某些事情,则必须指定
sync
之后的队列,例如
action
。但是我对很多这方面还是新手,所以我可能会弄错什么。关于术语,似乎把整个事情称为“运行循环”,而不仅仅是结束。关于排队,你说得很对。查看,如果不指定队列名称,我不确定默认行为是什么,我进一步查看了它
Ember.run.schedule
需要指定其队列参数,因此我认为上面的示例需要更正。如果希望在运行回调时同步绑定,则应将“操作”指定为队列,即“同步”(解析绑定)之后的队列。所以,
Ember.run.schedule('actions',function(){})将起作用。
context
arg是可选的(因为它们可以在内部使用
invoke
函数,该函数允许您指定回调并可选地指定上下文)。请注意,
Ember.run.once的用法是正确的;在绑定解析后,它将始终在“操作”队列上进行调度。
 Ember.run.schedule('actions', function() {
   console.log('I run at the end of the current runloop');
 });
 Ember.run.once([context,] callback[, *args]);