2

为什么这段代码有效:

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]。

非常感谢!

4

3 回答 3

3

试试这个:

// beginning of code omitted
callback: function(locale) {
    onLanguageReady(locale)
}
于 2013-05-29T08:39:19.917 回答
2

这是因为您正在分配undefined给该callback属性。

您正在调用onLanguageReady并将该值分配给回调方法。

解决方案是使用另一个函数作为回调函数,它将调用onLanguageReady@romainberger 给出的函数

于 2013-05-29T08:39:45.497 回答
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'));    
}

如果函数使用区域设置回调,则将起作用。

回调期望一个函数指针,当您说onLanguageReady(locale)您实际上正在执行该函数并因此将函数的结果分配为回调时,一旦处理完成,它就可以调用该函数指针,在这种情况下,返回什么都不是undefined

于 2013-05-29T08:39:42.907 回答