Javascript Bing映射v8事件传递的pin不正确?
因此,我正在使用bing maps v8编写一个应用程序。不幸的是,它没有z索引支持(尽管有z索引函数…)。所以我尝试使用层来完成类似的事情。问题是,当我在层之间交换pin时,事件开始在具有错误元数据的正确pin位置上触发 下面是我如何创建pin的Javascript Bing映射v8事件传递的pin不正确?,javascript,bing-maps,Javascript,Bing Maps,因此,我正在使用bing maps v8编写一个应用程序。不幸的是,它没有z索引支持(尽管有z索引函数…)。所以我尝试使用层来完成类似的事情。问题是,当我在层之间交换pin时,事件开始在具有错误元数据的正确pin位置上触发 下面是我如何创建pin的 function createImagePin(location, index, objArray) { var obj = objArray[index]; var smallPin = getSmallPin(obj);
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;
}
出于某种原因,每次鼠标中有一个pin对象的位置正确,但元数据不正确时,我都会得到它。如果我注释掉取消选择。。。我两个都得到了正确的答案
下面是我如何选择和取消选择引脚。根据给我的例子
目前没有其他代码接触这些引脚。。。我觉得这很奇怪。这几乎就像在内部,它只是复制层中的一些信息,而不是移动附着到对象的所有项目。事实上,如果我只是注释掉add/remove,它就会停止向我传递错误的数据。。。虽然我失去了我的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;
}
嗯,这似乎是数据问题而不是代码问题。我的数据被地理编码为相同的lat/long,用于一些地址不相同的属性。因此,阵列的重新排列会导致相同位置的不同阵列获得“顶部位置”