Como alvo um jquery-ui-mapa mapa gerado quando usando InfoBox
-
12-12-2019 - |
Pergunta
Eu estou usando jquery-ui-mapa para criar um Google Maps exemplo como este:
$('#CHMap').gmap({
mapTypeControl : false
}).bind('init', function(evt, map) {
log("Map initilised");
});
Em seguida em outros lugares no script que eu estou usando InfoBox para adicionar algum estilo-capaz de informações caixas preenchidas com dados puxado para trás a partir de um serviço de geolocalização, como por exemplo:
var boxText = document.createElement("div");
var ib = new InfoBox(myOptions); //myOptions can be ignored for this example
$.each(data, function(name, value) {
$('#CHMap').gmap('addMarker', {
id:value['YourId'],
'position': value['Latitude']+','+value['Longitude'],
'bounds': true,
'icon': '/img/gicon.png'
}).click(function() {
boxText.innerHTML = "hello";
ib.setContent(boxText);
ib.open(map, this);
});
});
'dados' é um objeto retornado do serviço de Geolocalização.Se eu colocar o acima 'addMarker' código dentro do dependente 'init' função quando o gmap é criado pela primeira vez, a infoBox exibe bem.Quando eu uso o "addMarker' código em qualquer lugar, eu fico "Uncaught ReferenceError:o mapa não está definido" erro no console.
Como posso referência o 'mapa' corretamente?Parece que eu não posso fazer var map = $('#CHMap').gmap({//options});
como o "jquery-ui-mapa' docs sugerem que gmap não retorna nada.
Solução
Eu acho que você pode fazer
var map = $('#CHMap').gmap();
Nota do OP.A maneira correta no mais recente do plugin:
var map = $('#CHMap').gmap('get', 'map');
Não estou a ver onde ele está dizendo que não retorna nada na API
quando você precisa para executar acessar o mapa, você pode adicionar o código dentro de um google maps ouvinte de evento que aguarda até que o mapa de tiles são carregados como este.
Como Feitos é obtida assíncrona do google, você não pode sempre ter certeza de que ele vai estar lá quando você chamá-lo, a menos que você faça algo assim.
google.maps.event.addListener(YOUR_GOOGLE_MAPS_INSTACE, 'tilesloaded', function() {
// put your initialization code in here.
}
Portanto, ele só será executado depois que o google maps está completamente carregado.
Cheers do Brasil !