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