无法访问Requirejs模块中的另一个类

时间:2014-05-28 10:52:30

标签: javascript backbone.js coffeescript requirejs

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

1 个答案:

答案 0 :(得分:2)

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

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

必须是这种方式,因为模块的工厂函数(赋予App的匿名函数)得到的define必然是undefined,因为在RequireJS加载时模块,App的模块尚未完成加载。如上所述执行require调用会导致RequireJS稍后在App的模块加载完成后获取该值。

记录here