咖啡脚本在我的ruby应用程序中不起作用

时间:2015-02-07 11:52:27

标签: javascript ruby-on-rails ruby coffeescript

我尝试在我的ruby应用中添加js动作。 我读过资产管道&在Rails指南中使用JavaScript,但我无法再现第二个中描述的内容。 我是铁轨的初学者,所以也许我做了太多"操纵"有文件,有扩展...

我有

控制器" mycontroller"应用程序/控制器/ mycontroller_controller.rb

class mycontrollerController < ApplicationController
    def new
    end
end

application.js app / assets / javascripts

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= require_tree .

mycontroller.coffee app / assets / javascripts

当我在浏览器中加载应用时,资产似乎被正确包含

<script src="/assets/mycontroller-d915d2e33a0815bf7b1ac3c478a90599.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/application-fdae31866ddfa65ac8bed4781fb60a9c.js?body=1" data-turbolinks-track="true"></script>

问题:我是否必须重命名.js.coffee中的.coffee文件?我试过但没有任何改变。

我跟着&#34;在Rails中使用JavaScript&#34;并修改了我的文件:

new.html.erb app / views / mycontroller

<a href="#" onclick="paintIt(this, '#990000')">Paint it red</a>

mycontroller.coffee app / assets / javascripts

paintIt = (element, backgroundColor, textColor) ->
  element.style.backgroundColor = backgroundColor
  if textColor?
      element.style.color = textColor

我认为咖啡脚本已正确编译:

(function() {
    var paintIt;

        paintIt = function(element, backgroundColor, textColor) {
            element.style.backgroundColor = backgroundColor;
            if (textColor != null) {
                return element.style.color = textColor;
            }
        };

 }).call(this);

但点击......任何想法都没有任何结果?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

问题是CoffeeScripts旨在以一种不引人注目的方式与DOM进行通信,因此您在HTML中看不到任何JS的迹象。这是因为您的脚本被编译为自执行匿名函数,它将其范围与全局命名空间隔离开来。 paintIt没有&#34;泄漏&#34;外。这是设计(和here's some explaination on this)。你需要以不同的方式做到这一点。

区分属性&#39;目的,我个人在data-*属性中放置任何与行为相关的东西,并在[data-paint]等选择器上绑定事件,表明存在这些属性。我建议你重写你的HTML:

<a href="#" data-paint="#990000">Paint it red</a>

然后处理每个click的{​​{1}}事件:

data-paint

A-a-你已经完成了。请参阅the JSFiddle