3

如果您Ember.run.debounceimmediate参数设置为 true 的情况下调用,则它仅在 Ember.run.debounce以前从未调用过时才有效(至少使用相同的上下文和函数参数)。“它有效”是指“它触发传递的函数”。

这是演示此行为的JS Bin 。

单击 div一次,等待 1 秒并按预期触发警报。但是连续的点击什么也没做。它只是第一次触发。如果您在 1 秒内多次单击,它不会显示任何警报窗口,因为debounce被多次调用。如果您根本不使用该immediate参数,那么一切都会按预期进行。

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

4

1 回答 1

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

于 2013-11-16T16:55:17.573 回答