我刚刚开始使用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");
}
}
});
我还有一个bootstrap,js文件,它由RequireJS框架自动加载:
require(['jquery', 'test', 'test2'], function ( $, t1, t2 ) {
console.log(t1);
});
确实找到了第二个参数,即“测试”文件。只是,它返回' null '。它找不到'test2',因为它试图寻找一个名为'test2.js'的文件。其实我想做点什么:
require(['jquery', 'test.test1', 'test.test2'], function ( $, t1, t2 ) {
console.log(t1);
});
但无论如何,我想为这两个对象获得一个处理程序。我做错了什么?
答案 0 :(得分: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;
});
然后你可以这样做:
require(['test'], function (test) {
var test1 = test.test1;
});