如果我在本地机器上使用coffeescript编译器将此coffeescript编译为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);
但是,如果我将在线coffeescript中的相同代码编译到js http://js2coffee.org/网站,我会得到这样的结果:
window.App = {
Models: {},
Views: {},
Collections: {},
Routers: {},
init: function() {
return Backbone.history.start();
}
};
后者似乎更令人期待。我认为这可能会导致我的项目出现一些问题,但无法分辨。我知道当我调用App.init()时,我的javascript控制台说它不存在。谢谢你的帮助!
修复!
正如@Rob W在下面指出的那样,我的coffeescript代码中有一些标签。后来我发现这是因为我有一个干净的TextMate安装,并没有将它设置为“Soft Tabs(spaces)”。
答案 0 :(得分:2)
您的“本地”和“在线”结果之间存在两个差异。
init
方法悬挂在App
之外。额外的闭包是coffee
编译器的默认行为。使用--bare
标志不要删除包装器:
coffee --bare --compile app.coffee
没有理由发生2。确保空格匹配:如果在模型等之前有四个前面的空格,在init之前有三个空格,则输出将是“错误的”。