首页 > 解决方案 > Ember:在滚动事件侦听器上多次调用 debounce

问题描述

我在滚动事件侦听器中添加了一个 debounce 方法。像这样的东西。

$group.on("scroll.topFix",() => {
   console.log('scroll event');
   debounce(this, ()=> {
     console.log('debounce called);
   },1000);
});

当我在$groupdebounce 上做滚动时,滚动事件的调用次数也相同。我不知道这件事的漏洞在哪里。

例如,如果打印了 5 次滚动事件,则debounce 调用也称为5 次

这是ember debounce 文档的链接。

标签: javascriptember.js

解决方案


您的问题是您将匿名函数传递给debounce

debounce(this, ()=> {
  console.log('debounce called);
},1000);

这是有问题的,因为您每次都无法debounce重新创建此功能!所以你永远不会debounce用同一个函数调用两次,这对于它做任何不同于 a 的事情是必要的setTimeout

所以你应该创建/保存这个函数到某个地方,然后像这样调用它

debounce(this, this.doSomething, 1000);

确保你总是传递完全相同的函数。仅仅因为 2 个函数做同样的事情并不意味着它是相同的函数实例。


推荐阅读