8

基本上,这个想法是“子”模块创建一个对象,并且该对象应该是作为“主”模块的实用程序库的一部分。但是,“sub”对象依赖于“main”中的实用程序:

// Main module
define(['sub'], function(sub) {
    var utils = {
        utilityMain: function () {
           // ...
        };
        // ...
    };

    tools.subModule = sub;

    return tools;
});

// Sub module
define(['main'], function(main) {
    return new (function () {

        // Singleton object using functions in main module
        var somestuff = function () {
            main.utilityMain();
            // etc
        };
    })();
});   

我如何使用 require.js 来实现这一点,而不会创建一个会吞噬整个星球的黑洞?

非常感谢。

4

1 回答 1

6

文档中有一些建议:

b可以a在使用该方法定义模块后稍后获取require()(确保将 require 指定为依赖项,以便使用正确的上下文进行查找a

例如:

// Sub module
define(['require'], function(require) {
    return new (function () {

        // Singleton object using functions in main module
        var somestuff = function () {
            require('main').utilityMain();
            // etc
        };
    })();
});

或者

您可以改为使用exports为模块创建一个空对象,该对象可立即供其他模块参考

例如:

// Main module
define(['sub', 'exports'], function(sub, exports) {
    exports.utilityMain: function () {
       // ...
    };

    exports.subModule = sub.sub;
});
// Sub module
define(['main', 'exports'], function(main, exports) {
    exports.sub = new (function () {

        // Singleton object using functions in main module
        var somestuff = function () {
            main.utilityMain();
            // etc
        };
    })();
});

循环依赖很少见,通常表明您可能需要重新考虑设计

于 2013-06-17T13:30:11.337 回答