requirejs несколько требует подряд

Я написал загрузчик модулей JavaScript, который определяет различные модули внутри цикла.

function(moduleList) {
    var arr = [];
    for (i = 0, l = moduleList.length; i < l; i++) {
        var m = moduleList[i];

        define(m.guid, function() {
            return  {
                container : m.container,
                configuration : m.configuration,
                moduleId : m.id
            }
        });
        arr[i] = m;
    }
}

Сразу после этого появляется следующий цикл for, в котором я "требую" ранее определенные модули.

for (i = 0, l = arr.length; i < l; i++) {   
   require([arr[i].id,arr[i].guid], function(module, moduleConfiguration) {
        core.utils.log("m.id: " + moduleConfiguration.moduleId);
        core.utils.log("init " + moduleConfiguration.moduleId, moduleConfiguration);

        module.init(moduleConfiguration);
    });
}

Проблема теперь в том, что внутри каждого блока "require" moduleConfiguration и module одинаковы. Для выполнения вызова "require" используются разные идентификаторы, но результат всегда одинаков.

Кто-нибудь знает, как найти способ обойти это?

1 ответ

Решение

Я думаю, что ваша функция определения должна выглядеть так, чтобы "m" было правильно определено:

function(moduleList) {
    var arr = [], i; // declare i!!!!
    function def(m) {
        define(m.guid, function() {
            return  {
                container : m.container,
                configuration : m.configuration,
                moduleId : m.id
            }
        });
    }

    for (i = 0, l = moduleList.length; i < l; i++) {

        var m = moduleList[i];

        def(m);
        arr[i] = m;
    }
 }

В вашем коде одна и та же переменная "m" является общей для всех этих обратных вызовов модуля. Вводя другую функцию (и другую область видимости), вы гарантируете, что каждый обратный вызов имеет свою собственную копию.

Другие вопросы по тегам