我正在使用谷歌地图v3,我的问题是我在一张地图上有200多个多边形,它们都是可编辑的,我需要在事件监听器中进行ajax调用,以便使用路径代替用于检测变化的多边形。
所以在回调函数this = polygon.getPath()中,我怎样才能得到它所属的多边形。在多边形中,我使用set来设置ajax调用所需的信息。
poly1.set('name', 'poly1');
poly1.set('id', 1);
google.maps.event.addListener(poly1, 'dragend', setNewArea);
google.maps.event.addListener(poly1.getPath(), 'insert_at', setNewArea);
google.maps.event.addListener(poly1.getPath(), 'remove_at', setNewArea);
google.maps.event.addListener(poly1.getPath(), 'set_at', setNewArea);
所以在setNewArea中,我可以很容易地检查它,看它是多边形还是路径,但是如果它是路径我无法获得它的父多边形。我不希望有200个自定义回调只是为了对poly进行硬编码,必须有另一种更清洁的方式。
答案 0 :(得分:2)
执行此操作的一种方法是将poly1的对象引用添加到指定的回调中。下面是我使用maps API编写的一些代码,它为打开信息窗口的特定标记上的click事件添加了一个监听器。
var latLng = new google.maps.LatLng(lat,lng);
var marker = new google.maps.Marker({
position: latLng,
map: window.map,
title: pinName
});
var infoWindow = new google.maps.InfoWindow({
content: content
});
google.maps.event.addListener(marker, 'click', function() {
infoWindow.open(window.map, marker);
});
因此,对于您的示例,您可能希望执行类似下面的操作。这将确保您的回调函数获取对多边形对象的引用,即使触发事件与路径相关。
poly1.set('name', 'poly1');
poly1.set('id', 1);
google.maps.event.addListener(poly1, 'dragend', function() {
setNewArea(poly1);
});
google.maps.event.addListener(poly1.getPath(), 'insert_at', function() {
setNewArea(poly1);
});
答案 1 :(得分:1)
您可以在对象之间进行循环引用。
var thePath = poly1.getPath();
thePath.parent = poly1;
google.maps.event.addListener(thePath, 'set_at', function () {
console.log('My parent is the polygon', this.parent);
}.bind(this);