我正在尝试在现有项目中使用requireJS。我有一个App模块,其中包含有关当前区域设置的信息,url ...如果当前区域设置是特殊的,则需要加载另一个模块:
// 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
模块应该加载某些点,我可以使用require(['locale/fa']
或使用shim来包装它。目前我正在使用旧的阻塞方式加载适当的locale/*.js
和PHP来选择正确的文件,没有问题。但我想知道requireJS程序员如何编写类似的代码。可能有一些比这段代码更好的方法:
require(['app'], function(App) {
if(App.env.locale == 'fa') {
require(['locale/fa'], function(fa) {
// 8-S
}
}
});
答案 0 :(得分:2)
这听起来像是i18n plugin的情况!我相信你可以定义函数和字符串。我会像这样定义一个包:
//nls/formatters.js
define({
root: {
currency: function(num) {
// implementation for default currency format (en-US often)
}
},
"fa": true
})
这是你的波斯语覆盖:
//nls/fa/formatters.js
define({
currency: function(num) {
// implementation for farsi currency format
}
})
在你的app.js文件中:
require(['app','i18n!nls/formatters'], function(App, Formatters) {
Formatters.currency(5.00); // works!
});