2

这个 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

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

4

2 回答 2

4

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

于 2012-10-07T15:03:08.917 回答
3

Jordan说的是正确的:您需要以某种方式将您的函数导出到全局可访问的范围,或者使用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
于 2012-10-07T21:27:50.940 回答