RequireJS/AMD и глобально доступные значения

Я использую RequireJS/AMD, чтобы разбить мое приложение JS. Один из моих модулей - это "окружающий" модуль, который делает только запрос (асинхронно) и затем сохраняет возвращенные данные. Этот модуль среды является зависимостью практически для всех остальных модулей в моем приложении.

Моя проблема в том, что мне нужна эта информация о среде, доступная немедленно. Есть ли способ, которым я могу гарантировать, что мой асинхронный запрос завершен и что мои переменные установлены правильно, прежде чем модуль среды возвращается?

environment.js

define(["./opui"], function(opui){

    var environment = {
            jsonpath: null,
            imgpath: null,
            platform: null
    }; 

    //request environment data asynchronously
    getEnvironment();

    //callback that sets environment data
    setEnvironment();

    return environment;

})

1 ответ

Необходимость беспокоиться о порядке инициализации часто означает, что дизайн имеет недостатки; это именно то, для чего существует RequireJS.

Используйте текстовый плагин† в каждом модуле, который нуждается в этом environment данные:

define(['dep1', 'dep2', 'text!./environment'],
  function (dep1, dep2, environmentJsonString) {
    var environment = JSON.parse(environmentJsonString);
    dep1.foo(environment.platform);
});

куда ./environment URL-адрес вызова на стороне сервера, который возвращает данные в формате JSON, например:

{ "jsonpath": "...",
  "imgpath": "...",
  "platform": "..." }

Это делает получение данных во время запуска приложения зависимым, поэтому RequireJS позаботится о том, чтобы ожидать асинхронного вызова AJAX для ./environment возвращать.

Имейте в виду, что все модули будут использовать один и тот же изменяемый экземпляр. Кроме того, не забудьте установить inlineText: false в r.jsКонфигурация сборки, чтобы избежать вставки этой строки JSON в процессе оптимизации.

есть плагин JSON, который обрабатывает синтаксический анализ text->JSON, но по какой-то причине он не работает для меня.

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