从Rails视图调用JS函数

时间:2014-07-17 12:09:17

标签: javascript ruby-on-rails coffeescript

以下是我的观点:

<a href="#" onclick="delete_quote(this);" class="quote-delete">
  <i class="fi-x small-1"></i>      
</a>

这是我的咖啡脚本文件:

$(document).ready -> 
    $('a.quote-delete').hide()

    $('div.quote').mouseenter ->
        $(this).children('a.quote-delete').show()

    $('div.quote').mouseleave ->
        $(this).children('a.quote-delete').hide()

delete_quote = (element) ->
    alert 'hi'

$(文件).ready部分工作正常,但是当我按下链接时,我不会得到“&#39;两个&#39;消息,我在浏览器控制台中出错:

Uncaught ReferenceError: delete_quote is not defined 

这是编译的JS文件:

(function() {
  var delete_quote;

  $(document).ready(function() {
    $('a.quote-delete').hide();
    $('div.quote').mouseenter(function() {
      return $(this).children('a.quote-delete').show();
    });
    return $('div.quote').mouseleave(function() {
      return $(this).children('a.quote-delete').hide();
    });
  });

  delete_quote = function(element) {
    return alert('hi');
  };

}).call(this);

1 个答案:

答案 0 :(得分:2)

CoffeeScript将delete_quote函数放在函数闭包中,因此不属于页面上的全局上下文。 onclick处理程序中的函数正在全局上下文中调用。

在这方面,CoffeeScript需要一些额外的帮助。我非常熟悉JavaScript,这是CoffeeScript的初学者,所以下面的代码可能不起作用,但应该给你基本的想法。您必须将该函数定义为window对象的一部分:

window.delete_quote = (element) ->
    alert 'Hi'

编辑:您也可以尝试:

this.delete_quote = (element) ->
    alert 'Hi'

这个其他StackOverflow问题也可能有用:CoffeeScript: coffee -w name-of-file.coffee complains: “window is not defined” - 虽然问题更多地与在Node和浏览器中运行CoffeeScript编译的JavaScript有关,但它涉及如何定义&#34; global& #34;变量和函数。