0

作成されたオブジェクトの外で緯度と経度を取得するにはどうすればよいですか? Ext.util.Geolocation の新しいオブジェクトを作成して更新し、オブジェクトの外で緯度と経度の値を取得しようとしていますが、「null」と表示されます。コード:

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 に答える