Так что я пишу приложение, используя bing maps v8. К сожалению, у него нет поддержки z-index (несмотря на наличие функций z-index ...). Поэтому я пытаюсь использовать слои для достижения чего-то подобного. Проблема в том, что когда я меняю штырь между слоями, событие начинает стрелять по правильному месту контакта с неправильными метаданными.Bing maps v8 событие проходит неправильный вывод?
Вот как я создаю булавку
function createImagePin(location, index, objArray)
{
var obj = objArray[index];
var smallPin = getSmallPin(obj);
var pin = new Microsoft.Maps.Pushpin(location,
{
visible: true,
icon: smallPin.data,
anchor: new Microsoft.Maps.Point(smallPin.width/2, smallPin.height/2) //Align center of pushpin with location.
});
pin.metadata = {};
pin.metadata.index = index;
pin.metadata.dataTarget = obj;
pin.metadata.isSelected = false;
Microsoft.Maps.Events.addHandler(pin, 'click', function (e) {
if(e.targetType === 'pushpin')
{
SetRowSelection(e.target.metadata.index);
}
});
Microsoft.Maps.Events.addHandler(pin, 'mouseover', function (e)
{
if(e.targetType === 'pushpin')
{
SelectPin(e.target);
ShowInfobox(e.target);
console.log(e.target.getLocation());
}
});
Microsoft.Maps.Events.addHandler(pin, 'mouseout', function (e)
{
if (e.targetType === 'pushpin')
{
DeselectPin(e.target);
HideInfobox();
}
});
return pin;
}
По какой-то причине, я получаю объект штыря в наведении курсора мыши каждый раз, когда имеет правильное расположение, но неправильные метаданные. Если я прокомментирую Отменить выбор ... Я правильно понимаю оба.
Вот как я выбираю и снимаю выделение с булавки. На основании примера я получил Bing Maps pushpin icon issues
Нет никакого другого кода, который касается этих контактов в данный момент ... Мне кажется, это довольно странно. Это почти как внутренне, это только копирование некоторой информации в Слой, а затем перемещение всех объектов, прикрепленных к объекту. На самом деле, если я просто закомментирую добавление/удаление, он перестает передавать мне неправильные данные ... хотя я теряю свою z-индексацию.
function SelectPin(pin)
{
switch (pin.metadata.dataTarget.ComparableType)
{
case "Subject":
mapLayers.subjectLayer.remove(pin);
pin.setOptions({ visible: true, icon: largeGreenHouse.data, anchor: new Microsoft.Maps.Point(largeGreenHouse.width/2, largeGreenHouse.height/2) });
break;
case "Listing Comp":
mapLayers.compLayer.remove(pin);
pin.setOptions({ visible: true, icon: largeBlueHouse.data, anchor: new Microsoft.Maps.Point(largeBlueHouse.width/2, largeBlueHouse.height/2) });
break;
case "Sales Comp":
mapLayers.compLayer.remove(pin);
pin.setOptions({ visible: true, icon: largeBlueHouse.data, anchor: new Microsoft.Maps.Point(largeBlueHouse.width/2, largeBlueHouse.height/2) });
break;
case "Hidden":
pin.setOptions({ visible: false });
return;
default:
mapLayers.observableLayer.remove(pin);
pin.setOptions({ visible: true, icon: largeGreyHouse.data, anchor: new Microsoft.Maps.Point(largeGreyHouse.width/2, largeGreyHouse.height/2) });
break;
}
mapLayers.selectionLayer.add(pin);
pin.metadata.isSelected = true;
}
function DeselectPin(pin)
{
if(!pin.metadata.isSelected)
return;
pin.metadata.isSelected = false;
mapLayers.selectionLayer.remove(pin);
switch (pin.metadata.dataTarget.ComparableType)
{
case "Subject":
pin.setOptions({ visible: true, icon: greenHouse.data, anchor: new Microsoft.Maps.Point(greenHouse.width/2, greenHouse.height/2) });
mapLayers.subjectLayer.add(pin);
break;
case "Listing Comp":
pin.setOptions({ visible: true, icon: blueHouse.data, anchor: new Microsoft.Maps.Point(blueHouse.width/2, blueHouse.height/2) });
mapLayers.compLayer.add(pin);
break;
case "Sales Comp":
pin.setOptions({ visible: true, icon: blueHouse.data, anchor: new Microsoft.Maps.Point(blueHouse.width/2, blueHouse.height/2) });
mapLayers.compLayer.add(pin);
break;
case "Hidden":
pin.setOptions({ visible: false });
return;
default:
pin.setOptions({ visible: true, icon: greyHouse.data, anchor: new Microsoft.Maps.Point(greyHouse.width/2, greyHouse.height/2) });
mapLayers.observableLayer.add(pin);
break;
}