Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript requirejs,一个文件中有两个类_Javascript_Requirejs - Fatal编程技术网

Javascript requirejs,一个文件中有两个类

Javascript requirejs,一个文件中有两个类,javascript,requirejs,Javascript,Requirejs,我刚开始使用RequireJS,但我想使用一个js文件,其中包含两个defines(),如下所示: 文件名:test.js define('test1', ['jquery'], function() { return { method1 : function () { console.log("test1 - method 1"); }, method2 : function () { c

我刚开始使用RequireJS,但我想使用一个js文件,其中包含两个defines(),如下所示:

文件名: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");
        }
    }
});
我还有一个引导js文件,由RequireJS框架自动加载:

require(['jquery', 'test', 'test2'], function ( $, t1, t2 ) {
    console.log(t1);
});
它确实找到了第二个参数“test”文件。仅返回“null”。它找不到“test2”,因为它试图查找名为“test2.js”的文件。实际上,我想做一些类似的事情:

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

但无论如何,我希望为这两个对象都提供一个处理程序。我做错了什么???

您不能像这样导出两个不同的模块。如果要将它们保留为“测试”的“子模块”,正确的方法是:

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;
});

粒度在文件级别。不能导入文件的某些部分。只要导入“test.js”就可以得到这两个对象。@Pointy那么我的代码仍然有问题,因为“test”返回一个空对象。啊。。。根据RequireJS文档,任何给定的.js文件中应该只有一个模块。根据本视频,这是可能的我也做了同样的事。我的第一个define nu只定义了一个函数(){},第二个确实定义了一个名称。但它仍然在寻找一个名为test2.js的文件但当我只对每个文件使用一个define时,它确实有效。我想我会坚持下去。如果你看了视频上的评论,你会发现其他人也很困惑。我认为这根本不是一个好的解释。如果我在那里定义了两个子模块,而我恰好只使用了代码中的一个模块。r.js优化器是否只将其中一个模块加载到最终编译的文件中?