【问题标题】:Rails 4 Coffee Function Not WorkingRails 4咖啡功能不起作用
【发布时间】:2016-01-08 13:44:57
【问题描述】:

我正在为我的应用程序的前端添加一些花里胡哨的东西,所以我将使用咖啡脚本。

我有一个名为“foo”的控制器,我看到一个名为“foo.coffee”的文件

javascripts/foo.coffee:

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

views/foo/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

【问题讨论】:

  • 展示你的工作 JS
  • @SergioTulentsev 我已经更新了帖子。
  • 这两个 sn-ps 做的事情不一样,你明白吗?
  • 咖啡稿不就是这样写的吗?
  • 尝试对 CS 也使用 .on 语法。只是为了确定。

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


【解决方案1】:

您可能有许多潜在的问题。

首先,您使用的是page:change - 这是turbolinks hook,它本质上是$(document).ready(.... 的替代品

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

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

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

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

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

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

--

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

您需要确保您的application.js 中有以下内容:

#app/assets/javascripts/application.js
// require_tree .

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

【讨论】:

  • 我已将 tubolinks 注释掉,因为我使用了条纹。我也有require_tree.。我会尝试一些页面事件并稍后报告,但我相信你的答案应该有效。
  • 如果您注释掉了 Turbolinks,请使用 $(document).on "click", "#bar",它应该可以工作
  • 不得不在商店里拿出我的笔记本电脑哈哈。像微风一样工作。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 2016-03-06
  • 2014-05-22
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多