-1

如果我在本地机器上使用咖啡脚本编译器将此咖啡脚本编译为 javascript:

window.App =
  Models: {}
  Views: {}
  Collections: {}
  Routers: {}
  init: ->
      Backbone.history.start()

我将得到这个生成的 javascript 输出:

// Generated by CoffeeScript 1.3.3
(function() {

  window.App = {
    Models: {},
    Views: {},
    Collections: {},
    Routers: {}
  };

  ({
    init: function() {
      var spotsList;
      spotsList = new App.Views.SpotsList();
      return Backbone.history.start();
    }
  });

}).call(this);

但是,如果我将在线咖啡脚本中的相同代码编译为 js http://js2coffee.org/站点,我将得到以下结果:

window.App = {
  Models: {},
  Views: {},
  Collections: {},
  Routers: {},
  init: function() {
    return Backbone.history.start();
  }
};

后者似乎更值得期待。我认为这可能会在我的项目中引起一些问题,但不能说。我知道当我调用 App.init() 时,我的 JavaScript 控制台说它不存在。谢谢您的帮助!

固定的!

正如@Rob W 在下面指出的那样,我的咖啡脚本代码中有一些标签。后来我发现这是因为我全新安装了 TextMate 并且没有将其设置为“软标签(空格)”。

4

1 回答 1

2

您的“本地”和“在线”结果有两个不同之处。

  1. 本地版本被包裹在一个闭包中。
  2. 本地版的init方法是外挂App

额外的闭包是coffee编译器的默认行为。使用--bare标志不摆脱包装:

coffee --bare --compile app.coffee

没有理由发生 2。确保空格匹配:如果在 Models 等之前有四个前面的空格,在 init 之前有三个空格,那么输出将是“错误的”。

于 2012-10-13T09:00:10.427 回答