我有一个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?