requirejs, два класса в одном файле - PullRequest
8 голосов
/ 21 марта 2012

Я только начал с 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");
        }
    }
});

У меня также есть загрузочный файл 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);
});

Но в любом случае я хотел бы получить обработчик для обоих объектов. Что я делаю не так?

1 Ответ

16 голосов
/ 21 марта 2012

Вы не можете экспортировать два разных модуля, как это. Если вы хотите сохранить их как «подмодули» для «теста», правильный путь будет следующим:

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