1

RequireJS/AMD を使用して JS アプリを分割しています。私のモジュールの 1 つは、要求を (非同期で) 行い、返されたデータを格納するだけの「環境」モジュールです。この環境モジュールは、アプリ内の他のほぼすべてのモジュールの依存関係です。

私の問題は、この環境情報をすぐに利用できるようにする必要があることです。環境モジュールが戻る前に、非同期リクエストが完了し、変数が正しく設定されていることを確認する方法はありますか?

環境.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: falseまた、最適化プロセス中にそのJSON文字列をインライン化しないように、r.jsのビルド構成を設定することを忘れないでください。

text->JSON解析を処理するJSONプラグインがありますが、何らかの理由で機能しませんでした。

于 2013-02-09T20:37:55.967 に答える