在CoffeeScript中跨AMD模块引用非全局变量
我正在用CoffeeScript编写一个应用程序,其中主对象声明如下:在CoffeeScript中跨AMD模块引用非全局变量,coffeescript,requirejs,Coffeescript,Requirejs,我正在用CoffeeScript编写一个应用程序,其中主对象声明如下: App = Models: {} Views: {} Collections: {} start: -> console.log('started') null require ['models/question', 'views/question'], -> new App().start() null 此代码编译为javascript,如下所示: (function
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
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);
在该程序的模型代码“required”中,Coffeescript及其编译如下所示:
(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
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的编译方式,编译后的代码中没有全局变量。因此,当问题模型页面加载时,它会抛出一个错误:在浏览器控制台中:
未捕获引用错误:未定义应用程序
我不知道如何解决这个问题,因为在我的项目中,我会有很多跨模块的参考资料。如何确保使用coffeescript时跨模块的可见性。通过将
-b
或--bare
标志传递给编译器,“在没有顶级函数安全包装的情况下编译JavaScript” 只需将其放在那里,即可将其设置为全局或“名称空间”
window.MyNamespace = {}
window.MyNamespace.App = App
谢谢你知道安全包装纸的用途吗?