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

ジョーダンが言ったことは正しいです。グローバルにアクセス可能なスコープに関数をエクスポートするか、フラグを使用してCoffeeScriptをコンパイルし、bare 出力が無名関数にラップされないようにする必要があります。

さらに、CoffeeScriptに少しバグがあります。JavaScriptjQuery.animateコードのようにオブジェクトリテラルではなく、にコールバックを渡しています。同等の動作をするには、おそらく次のようなものが必要です。

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 に答える