尝试定义咖啡脚本函数时获取 "reserved word 'function’"

Getting "reserved word 'function’" when trying to define coffee script function

我有这个咖啡脚本

@open_login_dialog = () ->
  opt = {
    autoOpen: false,
    modal: true,
    width: 'auto',
    focus: function(e) ->
      $(this).dialog('option', 'width', $("#loginBox").width())
  }

Rails 报告神秘错误,“SyntaxError: [stdin]:184:12: reserved word 'function'”。它没有告诉我一行,但是当我注释掉“focus:function”部分时,一切正常,这让我相信这是罪魁祸首。我如何编写上面的代码才能很好地与咖啡脚本一起播放?

根据@muistooshort 的评论,您需要使用 coffeescript 函数语法,将 function(a,b,c) 替换为 (a,b,c) ->

其次,您需要继续使用:在对象内部进行赋值。

我还建议复习一下 coffeescript。这是我favourite resource上的语言。 linter 也有助于捕获这些基本语法错误。

您的代码可以进一步清理:

@open_login_dialog = ->
  opt = 
    autoOpen: false
    modal: true
    width: 'auto'
    focus: -> 
      $(this).dialog 'option', 'width', $('#loginBox').width()

说明

  1. 如果您不需要任何参数,可以在函数定义中省略 (),而只使用箭头 ->.

  2. 您不需要 {} 方括号来定义对象

  3. 在多行定义对象时,不需要尾随逗号

  4. 您没有在焦点侦听器中使用 eventObject e,因此也可以忽略它。

  5. 调用函数和传递参数时,括号是可选的。