私のアプリケーションでは、モジュールを初期化段階ではなく(で列挙することによって./modules/modules
)、後で何らかの条件(ユーザー認証結果など)に基づいてオンデマンドでロードする必要があります。ユーザーAに電卓モジュールを提供し、ユーザーBにテキストエディターモジュールを提供したいとします。
簡単にするためにboilerplatejssampleModule1
サンプルアプリを取り上げて、とsampleModule2
がオンデマンドでロードされると仮定しましょう。
だから私はsrc\modules \modules.jsの最初のロードシーケンスからモジュールを削除します:
return [
require('./baseModule/module'),
/*require('./sampleModule1/module'),
require('./sampleModule2/module')*/
];
サマリーページ(src \ modules \ baseModule \ landingPage \ view.html)にコントロールを追加して、オンデマンドでロードします。
<div>
Congratulations! You are one step closer to creating your next large scale Javascript application!
</div>
<div>
<select id="ModuleLoader">
<option value="">Select module to load...</option>
<option value="./modules/sampleModule1/module">sampleModule1</option>
<option value="./modules/sampleModule2/module">sampleModule2</option>
</select>
</div>
次に、src \ modules \ baseModule \ module.jsにパッチを適用して、コンテキストをLandingPageComponentに渡します(何らかの理由で、元のソースコードにはありません)。
controller.addRoutes({
"/" : new LandingPageComponent(context)
});
最後に、読み込みコードをsrc \ modules \ baseModule \ landingPage\component.jsに追加します。
$('#ModuleLoader').on('change', function(){
require([this.value], function(mod){
moduleContext.loadChildContexts([mod]);
alert('Module enabled. Use can now use it.');
});
});
これは機能しているように見えますが、これが最善の方法ですか?
コンテキストの読み込みを適切に処理しますか?
同じモジュールを2回ロードしないように保護するにはどうすればよいですか?