我可以从coffeescript文件中调用Javascript函数吗?

时间:2014-01-24 02:42:26

标签: javascript jquery ruby-on-rails coffeescript

我正在尝试从Coffeescript文件调用javascript函数,对于我的$(document).ready(),它永远不会被调用。

我想调用的函数来自我在html head元素中包含的外部源,就在我的coffeescript文件包含之前,如下所示:

<script src="external.js"></script>
<%= javascript_include_tag params[:controller], 'data-turbolinks-track' => true %>

并在我的coffeescript文件(称为someControllerName.coffee)中执行此操作:

ready = ->
  ... call my method

$ -> ready

这是正确的方法吗?我可以在Chrome中看到我的脚本已编译为javascript,我可以在检查器的“网络”标签中看到它。

我正在使用Rails 4,这是我的application.js

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

编辑:

如果我通过alert("...");替换方法调用,则可以正常工作,如果我在$(document).ready()中使用javascript调用我的javascript方法,则可以正常工作。

EDIT2:

这是我真正的javascript函数:

var ready = function () {
  $('pre code').each(function (i, e) {
      hljs.highlightBlock(e)
  });
};

$(document).ready(ready);

我解决了这个问题:

highlight = ->
  $("pre code").each (i, e) ->
    hljs.highlightBlock(e)

$(document).on 'ready page:load', ->
  highlight()

1 个答案:

答案 0 :(得分:3)

这不符合你的想法:

$ -> ready

在JavaScript中:

$(function() {
    return ready;
});

你的问题是只有ready只是对函数的引用,它不像在Ruby中那样是函数调用。您必须说ready()来调用该函数,调用括号的函数只有在您调用带参数的函数时才是可选的:f xf(x)是相同的但是{{ 1}}和f不同。

我想你想说:

f()

甚至:

$ -> ready()