2012-08-25 33 views
2

我在Android應用程序中使用Barcodescannerplugin for Phonegap時遇到了JavaScript問題。我如何設置一個本地變量在JavaScript中作爲參數使用的函數?

我使用的插件帶了一個小的Javascript來啓用在我的Phongap應用程序中使用Barcodescanner。但在我看來,提供的javascript函數的接口並不是最佳的,因爲我不想在使用這些方法的每個位置上執行錯誤處理。

這就是爲什麼我試圖讓這個界面更容易的方式,我只需要調用一個方法scanBarcode()和調用腳本從掃描或沒有,如果失敗的東西獲取文本。下面是代碼:

function scanBarcode(){ 
    var resultText = ''; 
    window.plugins.barcodeScanner.scan( 
     function(result) { 
      if (!result.cancelled){ 
       resultText = result.text; 
      } 
     }, 
     function(error) { 
      alert("Scanning failed: " + error); 
     } 
    ); 
    return resultText; 
} 

我使用的插件,可以發現:Github Phonegap Plugins Android/BarcodeScanner

我的方法的結果總是相同的,一個空字符串。 我認爲原因是變量的範圍,但我不知道如何解決這個問題。

回答

3

原因是因爲window.plugins.barcodeScanner.scan方法異步執行 - 直到方法返回才調用成功回調。

我建議返回從方法Promise對象,所以像(使用jQuery爲例):

var result = $.Deferred(); 
window.plugins.barcodeScanner.scan( 
    function(result) { 
     if (!result.cancelled){ 
      result.resolve(result.text); 
     } 
    }, 
    function(error) { 
     result.reject(error); 
    } 
); 

return result; 
+0

OK,所以是不是有什麼辦法,使這些接口更容易在我嘗試的方式嗎? –

+0

好的,謝謝,我會嘗試這些例子,因爲我們在這些Web應用程序中也使用jQuery Mobile。 –

+0

嗨Rich,我已經使用你的examplecode和jQuery Mobile了。結果是我得到一個對象,但我無法將掃描的字符串取出。或者否則,我不理解API文檔,如果我認爲給延遲對象的resolve方法賦予的參數是返回給所有callbackmethods的值?我試過類似的東西:\t function clickScanBarcode(){ \t \t var result = scanBarcode(); \t \t alert(result); \t} –

1

感謝您的幫助,現在工程:)

對於所有其他誰得到了這些問題太多,分辨率看起來像這樣:

function scanBarcode(){ 
    var resultObject = $.Deferred(); 
    window.plugins.barcodeScanner.scan(
     function(result) { 
      if (!result.cancelled){ 
       resultObject.resolve(result.text); 
      } else { 
       resultObject.resolve(''); 
      } 
     }, 
     function(error) { 
      resultObject.resolve(''); 
     } 
    ); 
    return resultObject; 
} 

現在很容易只是說要獲得掃描值:

function clickScanBarcode(){ 
    var result = scanBarcode(); 
    result.done(function(text){ 
     alert('Barcodetext:'+text); 
    }); 
} 

我已經改變了錯誤的代碼並取消了方式,我總是得到一個空字符串來處理。在我的情況下,更多的錯誤處理沒有用處。

問候, 馬庫斯

相關問題