我有一个类来处理来自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电话。
那么伙计们,我做错了什么?