不能访问Requirejs模块中的另一个类

Cannot access to another class inside Requirejs module

本文关键字:另一个 模块 访问 Requirejs 不能      更新时间:2023-09-26

我无法访问我的"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);
});

我在这段代码中看到的唯一问题是循环依赖。通常,您希望设计代码以避免它们。如果不能,则应该修改上面的代码,使分配this.model(在RegisterView.prototype.init中)的行如下所示:

this.model = require("App").user;

必须这样做,因为模块的工厂函数(给予define的匿名函数)将获得的App必然是undefined,因为到RequireJS加载此模块时,App的模块尚未完成加载。像上面那样执行require调用会导致RequireJS稍后在App模块加载完成后获取该值。

记录。