RequireJS / AMD和全球可用值

时间:2013-02-07 16:58:19

标签: 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 个答案:

答案 0 :(得分:1)

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

在需要此environment数据的每个模块中使用text plugin†:

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

其中./environment是将数据作为JSON返回的服务器端调用的URL,例如:

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

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

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

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