包含Coffeescript生成的javascript?

时间:2013-01-24 16:40:29

标签: javascript coffeescript

我在test.js中有以下Coffeescript

yo () -> console.log("yo")

当通过coffee -o public / javascripts / -cw public / coffeescripts /编译时,我得到public / javascripts / test.js:

// Generated by CoffeeScript 1.4.0
(function() {
  var yo;

  yo = function() {
    return console.log('yo');
  };

}).call(this);

我正试图在HTML文件中以通常的方式包含它:

<script src="/javascripts/test.js" type="text/javascript"></script>
<script type='text/javascript'>
  //<![CDATA[
  $(function() {
    alert('before yo');
    yo();
    alert('after yo');
  });
  //]]>
</script>

然而,我一直得到“未捕获的参考错误:你没有定义哟”。什么是实际使用Coffeescript生成的javascript的过程?

2 个答案:

答案 0 :(得分:3)

在CoffeeScript文件中,yo是一个局部变量。它不是一个全局变量。如果您想使用其他JavaScript文件中的变量或HTML文件中的JavaScript,那么您需要将yo作为全局变量。

您可以在CoffeeScript文件中执行此操作,如下所示:

yo = -> ...

# either
@yo = yo
# or
window.yo = yo

答案 1 :(得分:2)

从您的Coffeescript生成的Javascript需要调整以在调用上下文之外导出yo

// Generated by CoffeeScript 1.4.0
(function(context) { // changed this line (note: context == 'this' which is being passed in at last line)
  var yo;

  yo = function() {
     return console.log('yo');
  };

  context.yo = yo; //export yo to the context.

}).call(this);

通常,当代码在网页上下文中使用时(而不是服务器代码),您会看到人们传递this和/或window,而不是document。 side.js调用上下文)。

我更新了Javascript,但您可以轻松使用“模块导出”惯用法,您可以在此处详细了解 - Pattern for CoffeeScript modules