requirejs模块未定义

时间:2014-07-18 07:18:46

标签: javascript jquery requirejs

我有以下目录结构

scripts
    modules
        tabs.js
    app.js

我在app.js中有以下代码

define([
    'jquery', 
    'underscore',
    'modules/tabs',
    ], function($, _, Tabs) {

    var App = (function() {

        var init = function() {
            console.log('app');
            Tabs.init();
        };

        return {
            init: init
        };

    }());

    return App;
});

以下tabs.js中的代码

define([
    'jquery', 
    'underscore',
    '../app'
    ], function($, _, App) {

    var Tabs = (function() {

        var init = function() {
            console.log('tabs init');
            App.init();
        };

        return {
            init: init
        }

    }());

    return Tabs;

});

可以看出依赖于tabs.js和tabs.js的app.js都依赖于app.js当我在app.js中调用Tabs.init()时会发生什么情况然后它工作正常但是当我在tabs.js中执行App.init()然后应用程序未定义。我怎样才能使这个工作,以便当我在tabs.js中执行App.init()时它应该工作?

1 个答案:

答案 0 :(得分:5)

  

如果定义循环依赖(“a”需要“b”而“b”需要“a”),   那么在这种情况下,当调用“b”的模块函数时,它将得到一个   “a”的未定义值。 “b”可以在模块之后获取“a”   已使用require()方法定义(请务必指定require   作为依赖,所以使用正确的上下文来查找“a”):

//Inside b.js:
define(["require", "a"],
    function(require, a) {
        //"a" in this case will be null if "a" also asked for "b",
        //a circular dependency.
        return function(title) {
            return require("a").doSomething();
        }
    }
);

http://requirejs.org/docs/api.html#circular