Диспетчер маркеров Google Maps ломает привязки меток

У меня возникла проблема с объединением менеджера маркеров и maplabel с помощью Google API карт.

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

Вот скрипт 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);
}); 

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


person Will    schedule 19.11.2013    source источник


Ответы (1)


Я нашел решение. Позиция должна быть установлена ​​на метке вместо маркера, и тогда маркер должен быть привязан к метке, а не наоборот. Также карта устанавливается менеджером маркеров при загрузке маркера. Вот обновленный 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);
}); 

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

person Will    schedule 26.11.2013
comment
Благодарю вас! Я совершил ошибку, привязав этикетку к маркеру! - person beginning; 07.01.2016