1

我在咖啡脚本文件中定义了一个函数:

showAlert = () ->
  alert("asdfsd")

从视图中我称这个函数为:

:javascript
  jQuery(function(){
   showAlert();
  });

但该功能未触发。这里有什么问题?

4

1 回答 1

1

这是因为 Coffeescript 自动将其转译后的 Javascript 输出包装在立即调用函数表达式(IIFE) 中,这意味着您在 Coffeescript 块中声明的任何函数都不在全局范围内。因此,您的 jQuery 块找不到该showAlert函数,因为它不存在于您的 jQuery 块可以访问的范围/闭包中。

您可以做的(尽管我不确定这是一个好主意)是在window命名空间上声明您的“全局”函数:

window.showAlert = -> alert('asdfasdf')

并从您的 jQuery 块中调用它:

javascript:
  jQuery(function($){
    window.showAlert();
  });

这将起作用,因为window命名空间在所有(浏览器)范围内都可用。

于 2013-07-28T12:39:11.223 回答