开发者问题收集

CoffeeScript - 如何在 Ruby on Rails 中使用 coffeescript?

2018-11-30
1601

我正在 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?

3个回答

问题是 element_with_id“p”在页面上找不到,因为 coffeescript 在页面加载之前就已加载。将代码包装在 document.ready 中,这样页面加载完成后就会调用 coffeescript。

$(document).ready ->
  myFunction = ->
   alert 'hello'
   return

  document.getElementById('p').onclick = ->
    myFunction()
    return
Talha Junaid
2018-11-30

您的第一个方法是在文档准备好后调用的,但是您的最后一个方法比第一个方法调用得早,此时 id 为“p”的元素可能尚未创建,因此 document.getElementById('p') 返回 null,并引发上述错误。

killernova
2018-11-30

我们可以使用反引号(`)在 coffee-scripts 中添加 java-script。

window.onload = ->
   `document.getElementById("demo").onclick = function() {myFunction()};

   function myFunction() {
       document.getElementById("demo").innerHTML = "YOU CLICKED ME!";
   }`
Varinder Sohal
2018-11-30