我遵循RequireJS网站上的循环引用说明,但它不起作用

时间:2014-12-11 23:43:13

标签: requirejs circular-dependency

我有一个简单的案例,我认为它遵循RequestJS文档中的说明:http://requirejs.org/docs/api.html#circular但是,它似乎不起作用。我把我的文件放在下面,并在dropbox中输入一个zip文件:https://www.dropbox.com/s/5h7hlj281cddh5t/program_version_2.zip?dl=0有人可以告诉我发生了什么事吗?

index.html:
<!doctype html>
<html>
<head>
    <script data-main="js/app" src="js/require.js" type="text/javascript"></script>
</head>
<body>
Loaded.
</body>
</html>

app.js:
requirejs.config({
    paths: {
        'module1': 'module1',
        'module2': 'module2'
    }
});

requirejs(['main'], function(main) {
    main.start();
});


main.js:
define(['module1'], function (module1) {

    var start = function() {

        console.log('In main.js.  Before initializeValues.');

        module1.doOperation();

    }

    return {
        start: start
    };
});


module1.js:
define(['require', 'module2'],
function (require, module2) {

    var doOperation = function() {
        console.log('Start of doOperation function');

        require('module2').someFunc();
    };

    var anotherFunc = function() {
        console.log('In anotherFunc.');
    };

    return {
        doOperation: doOperation,
        anotherFunc: anotherFunc
    };

});


module2.js:
require(['require', 'module1'], function(require, module1) {

    var someFunc = function() {
        console.log('In someFunc.');
        require('module1').anotherFunc();
    };

    return {
        someFunc: someFunc
    };
});


require.js:
/** vim: et:ts=4:sw=4:sts=4
 * @license RequireJS 2.0.4 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/jrburke/requirejs for details
 */
/*jslint regexp: true, nomen: true */
/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */

var requirejs, require, define;
(function (global) {
    'use strict';

    var version = '2.0.4',
        commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
        cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
        jsSuffixRegExp = /\.js$/,
            :          : 

我在控制台中收到消息:未捕获TypeError:无法读取属性&#39; someFunc&#39;未定义的。 。 。 。 module1.js:7

当我感觉不到RequireJS正在做什么时,我们很难向前迈进。有人会光明吗?

1 个答案:

答案 0 :(得分:1)

module2.js中你有:

require(['require', 'module1'], function(require, module1) {

您想使用:

define(['require', 'module1'], function(require, module1) {

您需要使用define来定义模块。