Обеспечить загрузку условного модуля requireJS
Я пытаюсь использовать requireJS в существующем проекте. У меня есть модуль приложения, который содержит информацию о текущей локали, 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
};
});
Теперь проблема в том, что я не знаю, когда модуль приложения загрузил метод number
. Если бы я был уверен, что locale/fa
модуль должен загрузиться в какой-то момент, я мог бы обернуть его с помощью require(['locale/fa']
или использовать прокладку. В настоящее время я использую старый способ блокировки, чтобы загрузить соответствующий locale/*.js
и PHP, чтобы выбрать правильный файл, без проблем. Но я хочу знать, как программисты requireJS пишут подобный код. Вероятно, есть какой-то способ лучше, чем этот код:
require(['app'], function(App) {
if(App.env.locale == 'fa') {
require(['locale/fa'], function(fa) {
// 8-S
}
}
});
1 ответ:
Это звучит как случай для плагина i18n ! Я считаю, что вы можете определять функции, а также строки. Я бы определил связку следующим образом:
//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 } })
В вашем приложении.файл js:
require(['app','i18n!nls/formatters'], function(App, Formatters) { Formatters.currency(5.00); // works! });