CoffeeScript - 如何在 Ruby on Rails 中使用 coffeescript?
我正在 Ruby on Rails 中使用 CoffeeScript。我正在使用 http://js2.coffee/ 将我的 javascript 和 jquery 转换为 CoffeeScript。
我们知道,当我们创建任何控制器时,Ruby on Rails 默认为我们提供了 .coffee 文件。
在我的视图文件夹中,我定义了一个
test.html.erb
文件,我有一个按钮
<button id="p">try</button>
如果我在同一页面即
test.html.erb
中使用 javascript 或 jquery 定义此按钮的脚本,它就可以工作。
我的 javascript 代码
document.getElementById("p").onclick = function() {myFunction()};
function myFunction() {
alert("hello");
}
和我的 jquery
$(document).ready(function(){
$("#p").click(function(){
alert("hello");
});
});
现在,我已经在
app/assets/javascripts/test.coffee
我的 jquery 代码的 coffeescript
$(document).ready ->
$('#p').click ->
alert 'hello'
return
return
当我在 test.coffee 中使用它时,它工作正常。
javascript 代码的 coffeescript
myFunction = ->
alert 'hello'
return
document.getElementById('p').onclick = ->
myFunction()
return
当我在 test.coffee 中使用此代码时,它在控制台中显示错误
Uncaught TypeError: Cannot set property 'onclick' of null
我也尝试了
test.js.coffee
,但仍然出现相同的错误
所以我应该只使用 jquery 生成的 coffeescript 还是有什么办法可以使用 javascript 生成的 coffeescript?
问题是 element_with_id“p”在页面上找不到,因为 coffeescript 在页面加载之前就已加载。将代码包装在
document.ready
中,这样页面加载完成后就会调用 coffeescript。
$(document).ready ->
myFunction = ->
alert 'hello'
return
document.getElementById('p').onclick = ->
myFunction()
return
您的第一个方法是在文档准备好后调用的,但是您的最后一个方法比第一个方法调用得早,此时 id 为“p”的元素可能尚未创建,因此
document.getElementById('p')
返回 null,并引发上述错误。
我们可以使用反引号(`)在 coffee-scripts 中添加 java-script。
window.onload = ->
`document.getElementById("demo").onclick = function() {myFunction()};
function myFunction() {
document.getElementById("demo").innerHTML = "YOU CLICKED ME!";
}`