将函数作为参数传递给coffeescript

时间:2014-05-21 04:37:11

标签: javascript function coffeescript

我正在尝试使用CoffeeScript Cookbook's debounce function,但我正在努力解决如何传递这个功能。

这是我的代码:

$('#inputID').on 'keyup', =>
    query = $('#inputID').val()
    func = => console.debug(query)
    Debounce.debounceFunction func, 300, false

调用debounce函数,300和“false”传递得很好,但'func'不会执行。

在另一个文件中我有:

root = exports ? this

class Debouncer
  debounceFunction: (func, threshold, execAsap) ->
    timeout = null
    (args...) ->
        obj = this
        delayed = ->
            func.apply(obj, args) unless execAsap
            timeout = null
        if timeout
            clearTimeout(timeout)
        else if (execAsap)
            func.apply(obj,args)
        timeout = setTimeout delayed, threshold || 100

root.Debounce = new Debouncer()

2 个答案:

答案 0 :(得分:1)

Cookbook中的例子具有误导性。您希望debouncer在注册事件处理程序时返回该函数。这样,每次发生键盘事件时都会运行超时逻辑。

$('#inputID').on 'keyup', Debounce.debounceFunction(func, 300, false)

Try it on jsfiddle

答案 1 :(得分:0)

在我看来,使用 debounce 你只是定义了这个功能。你也必须执行它......

func = ->
  query = $('#inputID').val()
  console.debug(query)

debounceFunc = debounce func, 300, false

$('#inputID').on 'keyup', -> debounceFunc()