为什么这段代码有效:
function onCordovaReady() {
navigator.globalization.getLocaleName(function (locale) {
jQuery.i18n.properties({
name:'message',
path:'lang/',
mode:'map',
language:locale.value,
callback: function(){
alert(locale.value);
alert(jQuery.i18n.prop('msg_hello'));
alert(jQuery.i18n.prop('msg_complex', 'John'));
}
});
});
}
这不是:
function onCordovaReady() {
navigator.globalization.getLocaleName(function (locale) {
jQuery.i18n.properties({
name:'message',
path:'lang/',
mode:'map',
language:locale.value,
callback: onLanguageReady(locale)
});
});
}
function onLanguageReady(locale) {
alert(locale.value);
alert(jQuery.i18n.prop('msg_hello'));
alert(jQuery.i18n.prop('msg_complex', 'John'));
}
我想在不同的函数中进行回调,因此我的代码看起来更干净,但无法使其工作。第一个警报将起作用(它将显示nl_NL),但第二个和第三个警报将输出[msg_hello]和[msg_complex]。
非常感谢!
答案 0 :(得分:2)
这是因为您要将undefined
分配给callback
属性。
您正在调用onLanguageReady
并将该值分配给回调方法。
解决方案是使用另一个函数作为回调函数,它将调用@romainberger给出的onLanguageReady
函数
答案 1 :(得分:1)
试试这个:
// beginning of code omitted
callback: function(locale) {
onLanguageReady(locale)
}
答案 2 :(得分:0)
function onCordovaReady() {
navigator.globalization.getLocaleName(function (locale) {
jQuery.i18n.properties({
name:'message',
path:'lang/',
mode:'map',
language:locale.value,
callback: onLanguageReady
});
});
}
function onLanguageReady(locale) {
alert(locale.value);
alert(jQuery.i18n.prop('msg_hello'));
alert(jQuery.i18n.prop('msg_complex', 'John'));
}
如果函数使用locale回调,将起作用。
回调期望一个函数指针,当你说onLanguageReady(locale)
你实际执行函数并因此将函数的结果指定为回调函数时,它可以调用它,在这种情况下返回因此undefined