2013-11-19 5 views
1

У меня проблема с объединением marker manager и maplabel с использованием API-интерфейсов google.Google Maps marker менеджер нарушает привязки ярлыков

Когда я привязываю ярлык к карте маркера и положение, все работает так, как ожидалось. Когда я перемещаю маркер, ярлык перемещается, и когда я удаляю маркер с карты, метка также удаляется. Проблема возникает, когда я добавляю маркер в ящик маркера. Похоже, что все привязки сломаны, поэтому моя метка больше не перемещается вместе с маркером, и метка остается на карте после удаления маркера.

Вот JS скрипка, показывающий вопрос: http://jsfiddle.net/d6Su5/

Вы увидите первый маркер (не в менеджере) может быть перемещен с этикеткой, но второй маркер оставляет метку позади.

Код:

var map; 
var mgr; 
var elevator; 
var myOptions = { 
    zoom: 6, 
    center: new google.maps.LatLng(46.87916, -3.32910), 
    mapTypeId: 'terrain' 
}; 
map = new google.maps.Map(document.getElementById('map'), myOptions); 
mgr = new MarkerManager(map); 

var marker = new google.maps.Marker({ 
    title: 'No manager', 
    position: new google.maps.LatLng(46.87916, -3.32910), 
    map: map, 
    draggable: true 
}); 

var mapLabel = new MapLabel({ 
    text: 'No manager' 
}); 

mapLabel.bindTo('position', marker); 
mapLabel.bindTo('map', marker); 

var marker2 = new google.maps.Marker({ 
    title: 'With manager', 
    position: new google.maps.LatLng(44.87916, -3.32910), 
    map: map, 
    draggable: true 
}); 

var mapLabel2 = new MapLabel({ 
    text: 'With manager' 
}); 

mapLabel2.bindTo('map', marker2); 
mapLabel2.bindTo('position', marker2); 

google.maps.event.addListenerOnce(map, 'idle', function() { 
    mgr.addMarker(marker2, 1); 
}); 

Что мне не хватает?

ответ

2

Я нашел решение. Позиция должна быть установлена ​​на этикетке вместо маркера, а затем маркер должен быть привязан к метке, а не наоборот. Кроме того, карта устанавливается менеджером маркера при загрузке маркера. Вот обновленный jsfiddle: http://jsfiddle.net/d6Su5/2

var marker2 = new google.maps.Marker({ 
    title: 'With manager', 
    draggable: true 
}); 

var mapLabel2 = new MapLabel({ 
    position: new google.maps.LatLng(44.87916, -3.32910), 
    text: 'With manager' 
}); 

marker2.bindTo('map', mapLabel2); 
marker2.bindTo('position', mapLabel2); 

google.maps.event.addListenerOnce(map, 'idle', function() { 
    mgr.addMarker(marker2, 2); 
}); 

Надеюсь, это поможет кому-то в будущем!

+0

Спасибо! Я делал ошибку, привязывая ярлык к маркеру! – yulie