【问题标题】:Ember.run.debounce with immediate argument does not work as expected带有立即参数的 Ember.run.debounce 无法按预期工作
【发布时间】:2013-11-29 21:01:56
【问题描述】:

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

这是演示此行为的JS Bin

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

这真的是正确的行为还是我遗漏了什么?

【问题讨论】:

    标签: ember.js debouncing


    【解决方案1】:

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

    直接的工作流程是立即运行代码,并阻止代码的任何实例运行,直到超时到期。因此,当您传入一个非立即数,然后快速发送另一个立即数时,它会从队列中删除非立即数(假设它已经运行),然后再阻塞 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

    【讨论】:

    • 我正在为此做一个 PR,这似乎是一个足够简单的用例来处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2012-08-30
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多