Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.01.2017, 01:46
Новичок на форуме
Отправить личное сообщение для ANVoevodin Посмотреть профиль Найти все сообщения от ANVoevodin
 
Регистрация: 07.01.2017
Сообщений: 2

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. Если вы помочь хотите, но проблемы не поняли, я попытаюсь объяснить подробнее
Ответить с цитированием
  #2 (permalink)  
Старый 07.01.2017, 10:20
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

ANVoevodin,
Цитата:
RequireJS на вторичной загрузке скрипта
Нет никакой вторичной загрузки скрипта. Модуль загружается 1 раз и дальше кому надо, подключает его в зависимости и использует.

Полностью твой код скопировал...
Цитата:
В Script2.js в переменную DB почему-то приходит undefined

Цитата:
что сейчас написано если бы и работало как я думал, то каждый раз возвращалась бы новая функция-конструктор DB, а хотелось бы ссылку на созданную в начале.
Именно ссылку ты и получаешь.
//Script2.js
define(["DB"], function (DB) {
	return function Script2(cid) {
		console.log(DB); //выводит function () { }, всё круто
		this.DB = DB;
	}
});

//Script1.js
define(["DB", "Script2"], function (DB, Script2) {
	return function Script1() {
		console.log(DB); //выводит function () { }, всё круто
		this.script2 = new Script2();
		console.log(DB === this.script2.DB) // true
	}
  }
);

Последний раз редактировалось destus, 07.01.2017 в 10:24.
Ответить с цитированием
  #3 (permalink)  
Старый 07.01.2017, 22:35
Новичок на форуме
Отправить личное сообщение для ANVoevodin Посмотреть профиль Найти все сообщения от ANVoevodin
 
Регистрация: 07.01.2017
Сообщений: 2

Проблема была в циклической зависимости. Пример не до конца моделировал реальную ситуацию в проекте, поэтому в следующий раз буду делать воспроизводимые примеры.
В общем решение из документации: когда приходит undefined при циклической зависимости, я напрямую этому свойству присваиваю следующее:
DB = require("DB");

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JavaScript: функция возвращает undefined. Подскажите где я туплю fluffyMan2000 Общие вопросы Javascript 15 14.11.2013 11:21
Узнать о полной загрузке подключаемого скрипта memba Общие вопросы Javascript 3 25.09.2013 16:17
"Подмена" скрипта при загрузке h3adhunt3r Общие вопросы Javascript 5 12.04.2012 11:38
Автозапуск скрипта при загрузке страницы HepoH Javascript под браузер 3 31.03.2012 22:27
Почему match() возвращает значение undefined yolka Events/DOM/Window 2 24.04.2010 15:09