我对最新版本的globalize.js有问题。要使用它,我必须加载cldr modules和语言定义。
现在,我从全球化文档中获得了这个示例:
// loading needed modules
$.get('/Scripts/cldr/supplemental/likelySubtags.json', Globalize.load);
$.get('/Scripts/cldr/main/en/numbers.json', Globalize.load);
$.get('/Scripts/cldr/main/de/numbers.json', Globalize.load);
// set current language
lobalize.locale('de-de');我现在的问题是本地json文件是加载异步的。这意味着,在我的脚本试图设置当前语言的时候,模块还没有加载。
现在我试着变得聪明,做了这样的事情:
$.get('/Scripts/cldr/supplemental/likelySubtags.json', function (data) {
Globalize.load(data);
Globalize.locale('de-de');
});
$.get('/Scripts/cldr/main/en/numbers.json', Globalize.load);
$.get('/Scripts/cldr/main/de/numbers.json', Globalize.load);这将工作,直到我真正使用全球化格式方法。在我的HTML中,我在敲除绑定中使用globalize,如下所示:
<span data-bind="text: Globalize.formatNumber(SomeNumber, { maximumFractionDigits: 0 })"></span>现在,"formatNumber“方法抛出了一个错误,因为在绑定发生时并非所有模块都已加载。
我现在的问题是,我如何同步我的JavaScript?
发布于 2014-08-13 14:58:38
解决这一问题的方法实际上有两种:
$.ajax和async: false选项加载json模块。1.使用async: false
您可以使用更通用的方法$.ajax而不是$.get (参见描述)。它有async选项:
默认情况下,所有请求都是异步发送的(即默认设置为true )。如果需要同步请求,请将此选项设置为false。
因此,您可以按照以下方式重写请求:
$.ajax({
url: '/Scripts/cldr/supplemental/likelySubtags.json',
type: 'GET',
async: false,
success: function(data) {
Globalize.load(data);
}
});您对所有3个请求都执行此操作,然后调用:
// set current language
lobalize.locale('de-de');就像你以前一样。但是现在,由于所有的请求都是同步完成的,所以这段代码应该可以像预期的那样工作。这种解决方案的缺点是它具有同步请求,这将导致一些延迟。这就是为什么我建议你第二种选择:
2.使用延迟:,您可以使用$.when()函数将所有三个请求的成功回调组合为如下所示:
$.when($.get('/Scripts/cldr/supplemental/likelySubtags.json'),
$.get('/Scripts/cldr/main/en/numbers.json'),
$.get('/Scripts/cldr/main/de/numbers.json'))
.done(function(result1, result2, result3) {
Globalize.load(result1[0]); //contains data of first executed request
Globalize.load(result2[0]); //contains data of second executed request
Globalize.load(result3[0]); //contains data of third executed request
// set current language
lobalize.locale('de-de');
// here you should fire your knockout binding
});好的是现在所有的请求都是异步完成的。但这仍然不能解决你的淘汰赛绑定问题。要解决这个问题,在加载所有数据时,还应该在成功回调中调用ko.applyBindings。
https://stackoverflow.com/questions/25281816
复制相似问题