2012-07-19 300 views
0

如何獲得創建對象之外的經度和緯度? 我已經做了Ext.util.Geolocation的新對象,更新了它,現在我試圖讓緯度和經度值在對象之外,但是它顯示我'null'。 代碼:Sencha Touch 2 Ext.util.Geolocation

var geo = Ext.create('Ext.util.Geolocation', { 
    autoUpdate: false, 
    listeners: { 
     locationupdate: function(geo) { 
      //alert('New latitude: ' + geo.getLatitude()); 
     }, 
     locationerror: function(geo, bTimeout, bPermissionDenied, bLocationUnavailable, message) { 
      if(bTimeout){ 
       alert('Timeout occurred.'); 
      } else { 
       alert('Error occurred.'); 
      } 
     } 
    } 
}); 

geo.updateLocation(); 
//geo.fireEvent('locationupdate'); 

alert(geo.getLatitude()); // it shows null 

在此先感謝。

+0

嘗試使用geo.updateLocation(); – Multitut 2012-10-11 17:35:02

回答

1

這可能是因爲它需要一些時間來獲得您的位置。

您應該嘗試獲取locationupdate回調函數內的經度和緯度。

如果你想外面訪問它,只要確保地理存在

if (geo) { alert(geo.getLatitude()); } 

希望這有助於

+0

警報顯示'null'。 – kmb 2012-07-25 13:51:44

+0

同樣在這裏。對此有過答案嗎? – Multitut 2012-10-11 17:28:31

+0

在第一次更新發生之前,您無法確定geo不等於null,因此無論您想在locationupdate回調函數中執行什麼操作。 – 2012-10-11 17:48:57

0

這只是一個時間問題 - 獲得位置是不同步的,所以你不能在locationupdate回調函數之外訪問它,至少在它被初始化之前。

你應該做你需要一個回調裏面做(如呼叫傳遞,如果它需要緯度其他功能)...

... 
    listeners: { 
     locationupdate: function(geo) { 
      yourCallbackFunction(geo.getLatitude()); 
    }, 
    ... 

如果你真的需要使用該回調之外,則在最壞的情況下,你可以這樣做:

var latitude; //will store latitude when ready.. 
var geo = Ext.create('Ext.util.Geolocation', { 
    autoUpdate: false, 
    listeners: { 
     locationupdate: function(geo) { 
      latitude = geo.getLatitude(); 
     } 
    } 
}); 
geo.updateLocation(); 

//waits until latitude exists then does something.. 
var untilLatThere = setInterval(function(){ 
    if(latitude) { 
     alert(latitude); //alerts a valid value.. 
     clearInterval(untilLatThere); 
    } 
}, 100);