Rails 4咖啡功能不起作用

时间:2015-10-10 19:28:10

标签: jquery ruby-on-rails ruby-on-rails-4 coffeescript

我在应用程序的前端添加了一些铃声和口哨,所以我会使用咖啡脚本。

我有一个名为" foo"我看到一个名为" foo.coffee"

的文件

Javascript角/ foo.coffee:

$(document).on "page:change", ->
  $("#bar").click ->
    alert "Click"

视图/富/ show.html.erb:

<%= link_to "Get Foobar!", '#', id: "bar", class: 'button' %>

在application.js中使用js:

$("#bar").on("click", function(){
      alert('Hey Foo!');
    });

当我点击按钮时,没有警报;在控制台没什么。如果我将代码更改为纯js,我会收到警报。我的Gemfile中有coffee-rails。有什么遗失的吗?我在轨道上4.2.4

1 个答案:

答案 0 :(得分:2)

可能存在许多潜在问题。

首先,您正在使用page:change - 这是一个turbolinks hook,它基本上是$(document).ready(....

的替身

enter image description here

虽然这本身不是问题,但我认为您使用它可能会缩减您应用中的某些功能:

#app/assets/javascripts/foo.coffee
foo = ->
   $("#bar").on "click", ->
      alert "Click"

$(document).on "ready page:load", foo

以上是使用此类功能的正确方法。另一种方法是使用document click对象中的delegation

#app/assets/javascripts/foo.coffee
$(document).on "click", "#bar", ->
   alert "Click"

这两种方法都应该能够为您提供所需的功能。具体而言,他们将使用 Turbolinks 来确保它不会妨碍功能。

-

您遇到的主要问题可能是foo.coffee未加载。

您需要确保application.js

中包含以下内容:
#app/assets/javascripts/application.js
// require_tree .

这将确保在应用程序运行时调用所有控制器JS。