4

我们依赖的一些 jquery 插件提供了包含特定于语言环境/文化的文件的能力,以使非美国用户对它们的功能感到更加自在(例如,jquery-globalize 和 bootstrap-datapicker)。

实现这一点的老派方法如下(其中“en-AU”是即时确定的,有时会导致缺少文化的 404):

<script type="text/javascript" src="/js/globalize/globalize.js"></script>
<script type="text/javascript" src="/js/globalize/cultures/globalize.culture.en-AU.js"></script>

有没有推荐的使用 requirejs 实现这一点的方法(注意 globalize 包含在 shim 中)?

这是我的第一次尝试,尚不确定 requirejs optomizer 将如何处理它......

Globalize = require("globalize");
...
locale = module.config().locale;
if (locale != null) {
  require(["globalize/globalize.culture." + locale], function() {
    logger.debug("Loaded locale '" + locale + "'");
    Globalize.culture(locale);
  }, function() {
    logger.debug("Unable to load locale '" + locale + "'");
  });
}

编辑:优化器处理得很好,但解决方案并没有真正起作用,因为文化文件是异步加载的,应用程序可能在设置文化之前使用了 Globalize。

4

1 回答 1

0

Kendo 在他们的代码中做了类似的事情。

这是对他们技术的轻微修改。这种特殊的风格允许模块通过 require 或直接包含脚本来加载。

我稍微修改了它以设置先决条件。不利的一面是,此代码将不再通过 r.js 优化器工作。

var myLocalPrereqs = ['file_english.min'];

("function" == typeof define && define.amd ? define : function (preReqs, func) {
    return func()
})(myLocalPrereqs, function () {
    (function () {
      // Your module code goes here...
    })()
});
于 2013-06-14T04:46:06.710 回答