带有立即参数的Ember.run.debounce不能按预期工作

时间:2013-11-16 12:36:47

标签: ember.js debouncing

如果您在immediate参数设置为true的情况下调用Ember.run.debounce,则只有在以前未调用 Ember.run.debounce时才会调用(至少在相同的上下文中和函数参数)。并且通过“它起作用”我的意思是“它会触发传递的函数”。

这是JS Bin证明了这种行为。

点击div 一次,等待1秒,然后按预期警告火警。但连续点击什么都不做。它只是第一次发射。如果您在1秒钟内多次单击,则不会显示任何警报窗口,因为debounce被多次调用。如果您根本不使用immediate参数,则一切都按预期工作。

这真的是一种正确的行为,还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

问题是从非立即切换到立即不是编程方案。或者您可以说功能不是为了处理切换而构建的。

立即工作流程是立即运行代码,并阻止任何代码实例运行,直到超时到期。因此,当您传入非立即数然后快速发送另一个立即数时,它会从队列中删除非立即数(假设它已经运行),然后再阻塞1000毫秒(根据即时工作流程)。

你可以通过立即改变你的时间来轻松解决这个问题。

var timeout = this.immediate?1:10000;
Ember.run.debounce(this, this.alertMe, timeout);

// Run immediately for further clicks
this.immediate = true;

跟进,这是在最新的金丝雀版本中修复的。

http://jsbin.com/ucanam/2511/edit