2012-10-07 66 views
2

此JavaScript代碼工作正常。ReferenceError:無法找到變量:goToByScroll使用CoffeScript

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 

任何想法可能會導致錯誤?

回答

3

喬丹說的是正確的:你需要以某種方式你的函數 與bare 標誌導出到全局可訪問的範圍或編譯你的CoffeeScript,防止被包裹在一個匿名函數的輸出。

此外,您已經有了一個位在你的CoffeeScript中的錯誤:你傳遞 回調到jQuery.animate,不是一個對象字面就像你在 JavaScript代碼執行。對於等效行爲,您可能需要這樣的東西: this:

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 
4

如果該函數位於不同的文件中,則它位於閉包中並且無法訪問。將函數附加到窗口對象或將其聲明在同一個文件中。

相關問題