Зазор телефона в Android на устройствеReady - PullRequest
1 голос
/ 24 ноября 2011

Я использую PhoneGap в разработке Android.Я написал, что PoC, однако я не могу понять, почему он не меняет широту переменной профиля.На самом деле

alert(profile.latitude);

работает до

geoCode.setLocation();

вот мой код;

document.addEventListener("deviceready", onDeviceReady, false);

var profile = {
    name: "",
    id: "red",
    latitude: "xx",
    longtitude: "",
    setCoordinates: function (latit, longt) {
        this.latitude = latit;
        this.longtitude = longt;
    }
};

var geoCode = {
    onSuccess: function (position) {
        profile.latitude = position.coords.latitude;
    },

    onError: function (error) {
    },

    setLocation : function () {
        navigator.geolocation.getCurrentPosition(this.onSuccess, this.onError);
    }
};

// Wait for PhoneGap to load
//

function onDeviceReady() {

    geoCode.setLocation();
    //alert("2");
    alert(profile.latitude);
};

заранее спасибо

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

navigator.geolocation.getCurrentPosition - это асинхронная функция.Вам нужно сделать что-то вроде:

var geoCode = {


setLocation : function (callback) {

    onSuccess: function (position) {
       callback(position.coords.latitude);
    },

    onError: function (error) {
    },
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}

};

// Wait for PhoneGap to load
//

function onDeviceReady() {

    geoCode.setLocation(function(latitude) {
        alert(latitude);
    });
};
0 голосов
/ 24 ноября 2011

Проще говоря, это потому, что вызов navigator.geolocation.getCurrentPosition () является асинхронным вызовом. Тем самым выполнение программы продолжается, и вы видите предупреждение. Через некоторое время после появления предупреждения вызов onSuccess вашего класса geoCode вызывается обновлением значения profile.latitude.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...