我在应用程序的前端添加了一些铃声和口哨,所以我会使用咖啡脚本。
我有一个名为" 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
答案 0 :(得分:2)
您可能存在许多潜在问题。
首先,您正在使用page:change
- 这是一个turbolinks hook,它基本上是$(document).ready(....
虽然这本身不是问题,但我认为您使用它可能会缩减您应用中的某些功能:
#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。