2013-10-30 43 views
0

carts.js.coffee如何調用從js.erb CoffeeScript的功能on Rails的3,如何理解範圍在Javascript

$(document).ready -> 
    add_book:() -> 
     alert "hihi!!" 

我試圖調用window.add_book();和add_book();在

add_to_cart.js.erb

但兩者不能工作。

add_book(); 
window.add_book(); 

還有沒有顯示螢火蟲或使用WEBrick控制檯

上的錯誤順便說一句,我不明白

的含義是什麼時

(function() {}) 
瓦爾或功能

或當{{}}包含的功能

({ 
add_book: function() { 
return alert("poc123!!"); 
} 
}); 

有沒有教程或關鍵詞可以讓我找到相關資源?

在此先感謝

+0

你會從這裏得到你的答案http://stackoverflow.com/questions/9254253/rails-calling-coffeescript-from-javascript – LHH

+0

@rubyist,這種情況是不同的。 –

回答

0

我不知道你想使用add_book:函數裏面是什麼,但是這肯定不是你想要的。這裏是你的代碼生成的JavaScript:

$(document).ready(function() { 
    return { 
    add_book: function() { 
     return alert("hihi!!"); 
    } 
    }; 
}); 

您返回包含函數的對象,但沒有人可以訪問它,因爲它不是由任何人引用。

你想要的是一個變量,能夠包含一個參考:

$(document).ready -> 
    window.add_book =() -> 
     alert "hihi!!" 

現在,你可以在任何地方使用它(後domready中,當然),直接調用add_book()

如果您使用chrome,this extension可能會幫助您發現coffeescript問題:它是一個實時shell,讓您看到計算出來的js並運行coffeescript代碼。

在附註上,我建議不要使用coffeescript,直到你感覺流利的javascript。

2

原因是你不能在js erb或coffee erb中使用$(document).ready

當您通過Ajax提供此js erb時,文檔已準備好很長時間。如果文件準備好了,erb中的函數將永遠不會被調用。

所以簡單的解決方法是,刪除文檔準備好,並直接調用函數。