jquery,在html5中使用deferred with geo location

时间:2013-11-25 04:00:17

标签: javascript jquery html5 deferred

我在论坛上得到了一些地理位置管理员的帮助,因为我陷入了两难境地。 我刚刚意识到地理位置是异步的。我希望它在哪里同步以便于编程。 ^^

这是完成的答案,感谢制作3: http://jsfiddle.net/x4Uf4/1/

GeoManager.prototype.init = function () {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(this.updateLocation.bind(this));
        } else {
            console.log("Geolocation is not activated!");
        }
    };

    GeoManager.prototype.updateLocation = function (position) {
        this.pos.lat = position.coords.latitude;
        this.pos.lng = position.coords.longitude;
    };


    var GM = new GeoManager();
    GM.init();

我尝试过以某种方式使用$ .Deferred(),但它失败了。有小费吗? :)

1 个答案:

答案 0 :(得分:0)

Arun P Johny在评论中回答了这个问题。

GeoManager = function () {
    this.pos = {
        lat: 0,
        lng: 0
    };
    console.log("Geo ok...");
};

GeoManager.prototype.init = function (callback) {
    var self = this;
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            self.updateLocation(position);
            callback(position);
        });
    } else {
        console.log("Geolocation is not activated!");
    }
};

GeoManager.prototype.updateLocation = function (position) {
    this.pos.lat = position.coords.latitude;
    this.pos.lng = position.coords.longitude;

    console.log(this.pos);
};

GeoManager.prototype.getLat = function () {
    return this.pos.lat;
}
GeoManager.prototype.getLng = function () {
    return this.pos.lng;
};

//returns an object
GeoManager.prototype.getPos = function () {
    return this.pos;
};

var GM = new GeoManager();
GM.init(function () {
    console.log('pos', GM.getPos())
});