我在CoffeeScript中编写一个应用程序,主要对象声明为:
App =
Models: {}
Views: {}
Collections: {}
start: ->
console.log('started')
null
require ['models/question', 'views/question'], ->
new App().start()
null
此代码编译为这样的javascript:
(function() {
var App;
App = {
Models: {},
Views: {},
Collections: {},
start: function() {
console.log('started');
return null;
}
};
require(['models/question', 'views/question'], function() {
new App().start();
return null;
});
}).call(this);
在型号代码中"必需"在这个程序中,Coffeescript及其编译看起来像这样:
#Coffeescript
App.Model.Question = Backbone.Model.extend(
defaults : ->
question: "How're you"
)
//Javascript
(function() {
App.Model.Question = Backbone.Model.extend({
defaults: function() {
return {
question: "How're you"
};
}
});
}).call(this);
由于coffeescript编译的方式,编译代码中没有全局变量。因此,当问题模型页面加载时,它会抛出一个错误:在浏览器控制台中:
Uncaught ReferenceError: App is not defined
我不知道如何解决这个问题,因为我的项目中有很多模块的引用。在使用coffeescript时,如何确保模块间的可见性。
答案 0 :(得分:0)
"在没有顶级功能安全包装的情况下编译JavaScript"将-b
或--bare
标志传递给编译器。 See Usage section of documentation
答案 1 :(得分:0)
您只需将其设置为全局或“命名空间”即可。
window.MyNamespace = {}
window.MyNamespace.App = App