2017-10-18 10 views
1

私はjavascriptライブラリを実装するためにalmond.jsを使用しています。私はコードから設定変数を分離しようとしています。私はすべての「グローバル」変数を含むconfig.jsonファイル、および他のモジュールに注入されます定義された「モデル」を作成しました:javascriptライブラリのJSON設定ファイルを使用

define("Model", [], function() { 
    "use strict"; 

    var model = { 
     options: { 
     } 
    }; 

    (function() { 
     var xhr = new XMLHttpRequest(); 
     xhr.overrideMimeType("application/json"); 
     xhr.open('GET', 'Config/config.json', true); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 300)) { 
       model.options = JSON.parse(xhr.response); 
      } 
     }; 
     xhr.send(); 
    })(); 

    return model; 
}); 

問題があり、その後、私は私の「モデル」を使用して、モジュールの上に定義し、リクエストはまだ完了せず、すべての 'options'パラメータはまだundefinedです。 モデルの初期化を待つ依存関係を実装する方法はありませんか、あるいはalmond.jsでこの機能を実現する別の方法でしょうか?

この機能を実現するには、require.jsでalmond.jsを置き換えてください。できれば、どのように見えるでしょうか?

ありがとうございます。

+0

アーモンドはダイナミックローディングをまったくサポートしていないため、これが可能であるか疑問に思っています。 –

+0

こんにちはPatrick。 almond.jsをrequire.jsに置き換えることができます。それは私が必要なものを達成するのに役立ちますか? –

答えて

0

私は私の質問への解決策を見つけた: 変更する前に、私のランチャースクリプトは:

(function() { 
    "use strict"; 
    require("Core"); 
})(); 

「コア」は、すべての依存関係を含め、メインモジュールです。

変更: 私は私のランチャーになったdefine("Model", [],function(){...});

を静的削除:私はすべての依存関係のチェーンを実行したときに

(function() { 
    "use strict"; 
    (function() { 
     var xhr = new XMLHttpRequest(); 
     xhr.overrideMimeType("application/json"); 
     xhr.open('GET', 'Config/config.json', true); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 300)) { 
       var model = { 
        options: JSON.parse(xhr.response) 
       }; 

       if (define && define.amd) { 
        define("Model", model); 
        require("Core"); 
       } 
      } 
     }; 
     xhr.send(); 
    })(); 
})(); 

今、すべてのモデルオプションは、config.jsonファイルから解析され、準備ができています。

関連する問題