Appcelerator Titanium - 反向地理编码器和可变范围问题

时间:2011-10-20 08:52:00

标签: javascript titanium appcelerator appcelerator-mobile

我正在尝试使用钛反向地理编码器,但我遇到一个奇怪的问题,我认为这是一个“范围”问题。我不太明白为什么在我定义了该范围内的变量时,我做的最后一次日志调用返回空值。

var win = Titanium.UI.currentWindow;
Ti.include('includes/db.js');

var city = null;
var country = null;

Titanium.Geolocation.reverseGeocoder(   Titanium.UI.currentWindow.latitude, 
                                        Titanium.UI.currentWindow.longitude, 
                                        function(evt) {

var places = evt.places;

if (places && places.length) {
city    = places[0].city;
country = places[0].country;    
}
Ti.API.log(city + ', ' + country); // <<< RETURNS CORRECT VALUES

});

Ti.API.log(city + ', ' + country); // <<< RETURNS NULL VALUES

1 个答案:

答案 0 :(得分:1)

这是Davin解释的异步调用。您必须在反向地理编码功能中调用一个函数。

我可以给你的建议是以事件为基础。创建事件和触发事件。一个例子:

Titanium.UI.currentWindow.addEventListener('gotPlace',function(e){
    Ti.API.log(e.city); // shows city correctly
});

Titanium.Geolocation.reverseGeocoder(   Titanium.UI.currentWindow.latitude, 
                                        Titanium.UI.currentWindow.longitude, 
                                        function(evt) {

    var city, country, places = evt.places;

    if (places && places.length) {
        city    = places[0].city;
        country = places[0].country;    
    }
    Ti.API.log(city + ', ' + country); // <<< RETURNS CORRECT VALUES
    Titanium.UI.currentWindow.fireEvent('gotPlace',{'city': city, 'country': country});
});