我无法访问我的“App”对象,尽管我需要在我的模块中使用已定义的语句。你可以解释一下,为什么我的代码无效。
这是我的main.js文件:
require(['underscore', 'backbone', 'App'], function(_, Backbone, App) {
window.App = new App();
Backbone.history.start();
return window.App.init();
});
这是我的app.js文件:
define(['underscore', 'backbone', 'Views/ApplicationView'], function(_, Backbone, ApplicationView) {
'use strict';
var App;
return App = (function() {
function App() {
this.init = __bind(this.init, this);
}
App.prototype.init = function() {
this.view = new ApplicationView();
};
return App;
})();
});
最后是我的applicationView.js
define(['underscore', 'backbone', 'views/AbstractView', 'App'], function(_, Backbone, AbstractView, App) {
'use strict';
var RegisterView;
return RegisterView = (function(_super) {
__extends(RegisterView, _super);
function RegisterView() {
this.init = __bind(this.init, this);
return RegisterView.__super__.constructor.apply(this, arguments);
}
RegisterView.prototype.init = function() {
RegisterView.__super__.init.apply(this, arguments);
this.model = App.user; // APP IS UNDEFINED
};
})(AbstractView);
});
答案 0 :(得分:2)
我在这段代码中看到的唯一问题是循环依赖。通常,您希望设计代码以避免它们。如果你不能,那么上面的代码应该被修改,以便分配this.model
(在RegisterView.prototype.init
中)的行是这样的:
this.model = require("App").user;
必须是这种方式,因为模块的工厂函数(赋予App
的匿名函数)得到的define
必然是undefined
,因为在RequireJS加载时模块,App
的模块尚未完成加载。如上所述执行require
调用会导致RequireJS稍后在App
的模块加载完成后获取该值。
记录here。