2013-05-29 65 views
1

這是爲什麼代碼工作:JavaScript的內聯回調函數,以單獨的函數

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

非常感謝!

回答

1

試試這個:

// beginning of code omitted 
callback: function(locale) { 
    onLanguageReady(locale) 
} 
+0

這完全不起作用,它的工作原理,如果我刪除行: 警報(locale.value); 當我離開那裏的行JavaScript代碼只是凍結。 –

+0

定義的locale變量在哪裏? – romainberger

+0

我想它是在navigator.globalization.getLocaleName中定義的,它來自cordova/phonegap插件。 [鏈接](http://docs.phonegap.com/en/2.7.0/cordova_globalization_globalization.md.html#globalization.getLocaleName) –

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

+0

這工作,如果我刪除警報(locale.value);線, 但我也需要locale.value –

2

這是因爲您正在將undefined分配給callback屬性。

您正在致電onLanguageReady並將該值賦給回調方法。

的解決方案是使用另一個函數作爲回調函數,將調用onLanguageReady功能通過@romainberger給出