clearInterval不起作用

时间:2014-05-23 21:51:16

标签: javascript

我有一个类来处理来自Google Maps API的标记。这是我的班级

function Marker() {
}


Marker.prototype.marker = null;
Marker.prototype.map = null;
Marker.prototype.icon = null;
Marker.prototype.exec_addListener = false;
Marker.prototype.listenerType = null;
Marker.prototype.exec_refresh = false;
Marker.prototype.latitude = null;
Marker.prototype.longitude = null;
Marker.prototype.webservice = null;
Marker.prototype.refresh_time = 10000;
Marker.prototype.id_interval = null;

Marker.prototype.getPosicaoAtual = function() {
    //Instancia o webservice
    this.webservice = new Webservice();

    //Faz o get dos dados de acordo o ID do veiculo
    var url = URL_VW_LOCAL_VEICULO + "&fields=latitude,longitude";

    var resp = this.webservice.get(url, $.cookie("token"));

    if (resp != null) {
        this.setLatitude(resp[0].latitude);
        this.setLongitude(resp[0].longitude);
    }
};

Marker.prototype.draw = function() {
    this.marker.setPosition(new google.maps.LatLng(this.getLatitude(), this.getLongitude()));
};

Marker.prototype.refresh = function() {
    //Atualiza a referncia para a classe
    var m = this;

    this.id_interval = setInterval(function() {
        m.getPosicaoAtual();
        m.draw();
    }, m.getRefreshTime());
};

Marker.prototype.stopRefresh = function(){
    clearInterval(this.id_interval);
};

Marker.prototype.destroyYourSelf = function(){
    console.log("Jesus, i'm dying!");
    this.stopRefresh();
    this.marker.setMap(null);
};

Marker.prototype.init = function() {
    //Seta as opções do marker
    var options = {
        "position": new google.maps.LatLng(this.getLatitude(), this.getLongitude()),
        "map": this.map.getMap()
    };

    //Caso o marker tenha um icone, coloca ele nas opções
    if (this.icon != null && this.icon != undefined) {
        options.icon = this.icon;
    }

    //Instancia um novo objeto do tipo marker
    this.marker = new google.maps.Marker(options);

    //Verifica se o addListener é pra ser executado
    if (this.exec_addListener) {
        this.addListener();
    }

    //registra o evento para pegar a posição atual, caso esteja setado para isso
    if (this.exec_refresh) {
        this.refresh();
    }
};

当我实例化一个新标记时,我设置执行一个函数refresh(),我将ID保存在id_interval中,但当我调用函数destroyYourSelf()时,我也在那里调用stopRefresh()来停止间隔循环。

函数refresh()执行一些XHR调用。

我们认为,循环不会停止,因为我仍然会看到XHR电话。

那么伙计们,我做错了什么?

0 个答案:

没有答案