0

如何在创建的对象之外获取纬度和经度?我已经创建了 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

提前致谢。

4

2 回答 2

1

这可能是因为获取您的位置需要一些时间。

您应该尝试在locationupdate回调函数中获取纬度和经度。

如果您想在外部访问它,只需确保 geo 存在

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

希望这可以帮助

于 2012-07-19T15:05:44.253 回答
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);
于 2012-12-07T13:08:08.813 回答