RequireJS на вторичной загрузке скрипта возвращает undefined
Всем привет. Пытаюсь сделать такую вещь используя RequireJS:
1. Есть скрипт Script1.js, который выполняет какие-то действия с данными из скрипта DB.js. 2. Есть скрипт Script2.js, который так же выполняет какие-то действия с данными из скрипта DB и подгружается этот скрипт из script1.js. 3. Есть сам скрипт DB, который просто имеет переменные с необходимыми данными. Примерный кусок кода: //Script1.js define(["DB", "Script2"], function (DB, Script2) { return function Script1() { console.log(DB); //выводит function () { }, всё круто this.script2 = new Script2(); } ); //Script2.js define(["DB"], function (DB) { return function Script2(cid) { console.log(DB); //выводит undefined, не то, что хотелось бы } }); //DB.js define(function () { //сюда код попадает единственный раз, когда RequireJS подключает его из Script1.js var DB = function () {}; DB.someData = { one: "two" }; return DB; }); В Script2.js в переменную DB почему-то приходит undefined. Т.е. типа файл DB уже подгружался однажды, и RequireJS решил просто ничего не делать и не возвращать. Я уверен, что он знает, что делает, но хочется узнать как всё таки получить то, что я у него прошу? DB - это такое некое подобие "класса" со статическими свойствами. В данной реализации пока пытался решить проблему я понял, что то, что сейчас написано если бы и работало как я думал, то каждый раз возвращалась бы новая функция-конструктор DB, а хотелось бы ссылку на созданную в начале. В общем, пытался объяснить как мог, итог: приходит undefined, хотя я ожидал функцию-конструктор DB. Если вы помочь хотите, но проблемы не поняли, я попытаюсь объяснить подробнее :) |
Проблема была в циклической зависимости. Пример не до конца моделировал реальную ситуацию в проекте, поэтому в следующий раз буду делать воспроизводимые примеры.
В общем решение из документации: когда приходит undefined при циклической зависимости, я напрямую этому свойству присваиваю следующее: DB = require("DB"); Наверное есть решение по лучше (как минимум избавиться от циклической зависимости), но пока в процессе обучения не стал сильно углубляться, пытаюсь не запутаться в куче новой информации, так что такое решение пока вполне подходит. |
Часовой пояс GMT +3, время: 20:55. |