1

我正在使用 RequireJS/AMD 来分解我的 JS 应用程序。我的模块之一是“环境”模块,它只做一个请求(异步)然后存储返回的数据。这个环境模块是我应用程序中几乎所有其他模块的依赖项。

我的问题是我需要立即获得此环境信息。有没有办法可以确保我的异步请求已经完成并且在环境模块返回之前我的变量设置正确?

环境.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;

})
4

1 回答 1

1

不必担心初始化顺序通常意味着设计有缺陷;这正是 RequireJS 的用途。

在需要此数据的每个模块中使用文本插件†:environment

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

./environment以 JSON 格式返回数据的服务器端调用的 URL在哪里,例如:

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

这使得在应用程序启动期间检索数据成为依赖项,因此 RequireJS 将负责等待异步 AJAX 调用./environment返回。

请记住,所有模块都将共享相同的可变实例。另外,不要忘记inlineText: falser.js的构建配置中进行设置,以避免在优化过程中内联该 JSON 字符串。

有一个 JSON 插件可以处理 text->JSON 解析,但由于某种原因它对我不起作用。

于 2013-02-09T20:37:55.967 回答