requirejs,一个文件中的两个类

w00*_*w00 8 javascript requirejs

我刚开始使用RequireJS,但是我被困在我想要使用一个js文件的部分,其中有两个define(),如下所示:

文件名:test.js

define('test1', ['jquery'], function() {
    return {
        method1 : function () {
            console.log("test1 - method 1");
        },

        method2 : function () {
            console.log("test1 - method 2");
        }
    }
});

define('test2', ['jquery'], function() {
    return {
        method1 : function () {
            console.log("test2 - method 1");
        },

        method2 : function () {
            console.log("test2 - method 2");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我还有一个bootstrap,js文件,由RequireJS框架自动加载:

require(['jquery', 'test', 'test2'], function ( $, t1, t2 ) {
    console.log(t1);
});
Run Code Online (Sandbox Code Playgroud)

它确实找到了第二个参数,即"测试"文件.只是,它返回一个' null '.它找不到'test2',因为它试图寻找一个名为'test2.js'的文件.其实我想做的事情如下:

require(['jquery', 'test.test1', 'test.test2'], function ( $, t1, t2 ) {
    console.log(t1);
});
Run Code Online (Sandbox Code Playgroud)

但无论如何,我想得到两个对象的处理程序.我究竟做错了什么??

ggo*_*zad 16

您无法导出两个不同的模块.如果你想把它们作为'test'的"子模块",正确的方法是:

define('test', ['jquery'], function() {
    var exports = {};
    exports.test1 = {
        method1 : function () {
            console.log("test1 - method 1");
        },

        method2 : function () {
            console.log("test1 - method 2");
        }
    };

    exports.test2 = {
        method1 : function () {
            console.log("test2 - method 1");
        },

        method2 : function () {
            console.log("test2 - method 2");
        }
    };

    return exports;
});
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

require(['test'], function (test) {
    var test1 = test.test1;
});
Run Code Online (Sandbox Code Playgroud)