我有一个requireJS设置,其中包含预编译的Handlebars模板和我在数据库中的翻译i18next。我需要按以下顺序做一些事情:
- 从数据库加载我的翻译
- 在 Handlebars 中注册一个助手,以便可以翻译我在预编译模板中的值
我的 requireJS 配置文件如下所示:
require.config({
deps: ["main"],
paths: {
'handlebars.runtime': "../assets/js/libs/handlebars.runtime.amd.min",
i18n: "../assets/js/libs/i18next-1.7.1",
// Shim Plugin
use: "../assets/js/plugins/use"
},
use: {
i18n: {
attach: "i18n"
}
}
});
我的main.js
文件看起来像这样,它需要namespace.js
:
require([
'namespace',
'modules/Transport'
], function (
namespace,
$,
Transport
) {
var Router = Backbone.Router.extend({
routes: {
'*any': 'any'
},
我namespace.js
将尝试注册 Handlebars 助手并使用翻译初始化 i18next:
define([
"handlebars.runtime",
"use!i18n"
], function(
Handlebars,
i18n
) {
var defaultLanguage = 'en';
var translations;
$.when(
$.getJSON('/api/translations', function (result) {
translations = result;
})
).then(function () {
i18n.init({ useCookie: false, resStore: translations, lng: defaultLanguage });
Handlebars.default.registerHelper('t', function(i18n_key) {
var result = i18n.t(i18n_key);
return new Handlebars.default.SafeString(result);
});
});
我的modules/Transport.js
模块将依赖namespace.js
并加载预编译的模板。加载预编译模板时,它在Handlebars.default.templates
. 所以我的模块看起来像这样:
define([
'namespace',
'templates/compiled/transport_template'
], function(
namespace,
) {
i18n.t('translate something');
var template = Handlebars.default.templates['transport_template'];
我遇到的问题是我无法让 requireJS 首先加载翻译,然后继续注册帮助程序并在我的模块中进行一些翻译。模块和模板在对我的数据库的异步调用完成之前被加载,所以我总是在没有加载东西的时候得到错误(或者帮助程序,或者 i18next 模块)
我在这里真的很困惑,在加载我的模块之前,如何设置 requireJS 来加载 Handlebars 和 i18next?