既存のプロジェクトでrequireJSを使用しようとしています。現在のロケール、URL ...に関する情報を持つAppモジュールがあり、現在のロケールが特別なものである場合は別のモジュールをロードしたい:
// App.js
define([], function() {
return {
setEnv: function(obj) { //obj: {locale:'en'}
this.env = obj;
that = this;
if( this.env.locale == 'fa' )
require(['locale/fa'], function(fa) {
that.number = fa.number
};
else
this.number = function( n ) { return n+'' }
}
}
});
ロケールファイルは次のようなものです。
// locale/fa.js
define([], function() {
var enToFaDigit(n) { // a function converts a number to persian representation };
// more stuff
return {
number: enToFaDigit
};
});
問題は、Appモジュールがいつnumber
メソッドをロードしたかわからないことです。ある時点でlocale/fa
モジュールがロードされると確信している場合は、shimを使用してラップするrequire(['locale/fa']
か、shimを使用できます。現在、私は古いブロッキング方法を使用して適切なファイルをロードlocale/*.js
し、PHPを使用して適切なファイルを問題なく選択しています。しかし、requireJSプログラマーがどのように同様のコードを書くのか知りたいです。おそらく、このコードよりも優れた方法があります。
require(['app'], function(App) {
if(App.env.locale == 'fa') {
require(['locale/fa'], function(fa) {
// 8-S
}
}
});