2014-06-24 34 views
0

要允许用户在地图上的标记中删除正确的标记,我需要将每个标记与其数据存储ID关联起来,这是一个字符串。我原本以为我可以将ID设置为整数,并使用标记的现有zIndex属性。这导致下面的代码创建每个物理标记。 (但是,唉,我无法访问的整数ID值)。添加非标准标记属性

var marker = new google.maps.Marker({ position: point, map: map , title: text, icon: icon, zIndex: ID}); 

我不知道如何添加属性的google.maps.Marker原型,将持有的ID字符串,我想这是无论如何,不​​建议改变这些原型。那么这是如何完成的?是否必须使用zIndex属性作为包含实际ID的数组的索引作为与zIndex值对应的元素?这也很尴尬。当然有更好的方法来做到这一点。

+2

例如,您可以'marker.id = ID'和访问其设置使用后来。 –

+1

你的评论基本上回答了我的问题。但是我仍然陷入困境,因为我不知道要隐藏哪个点击标记。我知道从我的google-app-engine数据存储中删除哪个标记,因为那是'marker.id'的值。我不得不提出另一个问题,关于隐藏,因为即使@ jonathanwilson的答案不会将点击的标记与隐藏的标记相关联,我不认为,因为'hideMarkersWithIdIn()'需要索引而不是标记点击作为参数。 – zerowords

回答

0

假设你有locations数组:

var markers = []; 
for(var i in locations){ 
    var loc = locations[i]; 
    var marker = new google.maps.Marker({ 
     position: loc.point 
     map: map, 
     title: loc.text, 
     icon: loc.icon 
    }); 
    marker.id = loc.id; 
    markers.push(marker); 
} 

你可以做到这一点,因为每个标记只是一个普通的老式JavaScript对象。

然后,你可以定义一个函数来隐藏与特定的标识标记:

function hideMarkersWithIdIn(ids){ 
    var markersToRemove = markers.filter(function(marker){ 
     return ids.indexOf(marker.id) > -1; 
    }); 
    markersToRemove.forEach(function(marker){ 
     marker.setMap(null); 
    }); 
} 

,可以像

hideMarkersWithIdIn([1,5,3])