在coffeescript中编写回调函数

时间:2014-12-16 15:35:35

标签: javascript jquery function callback coffeescript

我在理解如何在coffeescript函数中编写回调函数时遇到一些麻烦。我创建了这个脚本和几个函数......

$('form').submit (e) ->
    console.log $(this)
    e.preventDefault()
    if $(this).hasClass 'volunteer-check-out-find-me-form'
        showFormLoader $(this), $(this).parent('aside.form').sibling('.form-loader'), ->
            console.log 'finished'

showFormLoader = (form, formLoader, callback) ->
    'showing loader and hiding form'
    form.fadeOut ->
        formLoader.addClass('show').one 'webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', ->
            console.log 'calling back'
            callback()

但是当我提交表单

时,我在控制台中收到此错误

Uncaught TypeError: undefined is not a function

在线上功能调用开启,我做错了什么?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

Coffee脚本不允许按照Javascript的方式对函数进行前向引用,因此您需要将showFormLoader移到submit处理程序之上。这样,声明在引用之前。顺便说一下,IMO是Coffeescript的痛点。

所以这失败了:

baz(3)

baz = (n) ->
  console.log n

错误:

TypeError: undefined is not a function
  at Object.<anonymous> (untitled:51:3)
  at Object.<anonymous> (untitled:57:4)
  at Module._compile (module.js:456:26)

但当然这成功了:

baz = (n) ->
  console.log n

baz(3)

我希望我能正确理解你的问题。