ReferenceError:找不到变量:goToByScroll使用CoffeeScript

时间:2012-10-07 14:58:15

标签: javascript coffeescript

这个javascript代码工作正常。

  function goToByScroll(id){
     $('html,body').animate({scrollTop: $("#"+id).offset().top - 50},'slow');
  }

我的CoffeScript版本很难过。我在application.js.coffee上有以下代码。

  goToByScroll = (id) ->
    $("html,body").animate ->
      scrollTop: $("#" + id).offset().top - 50
    , "slow"

但是我收到了错误

ReferenceError: Can't find variable: goToByScroll

知道可能导致错误的原因是什么?

2 个答案:

答案 0 :(得分:4)

如果函数位于不同的文件中,则它位于闭包内部且无法访问。将函数附加到窗口对象或在同一文件中声明它。

答案 1 :(得分:3)

乔丹说的是正确的:你需要以某种方式导出你的功能 到全局可访问的范围或使用bare编译CoffeeScript 标志,防止输出被包装在匿名函数中。

此外,你在CoffeeScript中遇到了一些错误:你已经过去了 对jQuery.animate的回调,而不是像你那样的对象文字 JavaScript代码。对于等效行为,您可能需要类似的东西 这样:

goToByScroll = (id) ->
    $("html,body").animate
        # CoffeeScript supports string interpolation, that's what the #{}
        # syntax does
        scrollTip: $("##{id}").offset().top - 50
    , "slow"

# Then, export it by attaching it to the window or some object accessible
# outside this scope
window.goToByScroll = goToByScroll