Javascript GoogleMapsGeoXML3:向其中传递一个placemark';谁有自己的事件监听器?

Javascript GoogleMapsGeoXML3:向其中传递一个placemark';谁有自己的事件监听器?,javascript,google-maps,kml,geoxml3,Javascript,Google Maps,Kml,Geoxml3,我正在处理一个intranet项目,因此我的KML文件无法从外部获得。这意味着我依赖geoXML3库将XML解析到我的Google地图上。然而,缺少事件侦听器的文档是令人沮丧的。我想调用一个click侦听器并传入geoXML3 placemark。我尝试执行以下操作,但是,clickListener始终以p的形式接收在afterParse循环中处理的最后一个多边形 kml = new geoXML3.parser({ suppressInfoWindows: true, map:

我正在处理一个intranet项目,因此我的KML文件无法从外部获得。这意味着我依赖geoXML3库将XML解析到我的Google地图上。然而,缺少事件侦听器的文档是令人沮丧的。我想调用一个click侦听器并传入geoXML3 placemark。我尝试执行以下操作,但是,
clickListener
始终以
p
的形式接收在
afterParse
循环中处理的最后一个多边形

kml = new geoXML3.parser({
    suppressInfoWindows: true,
    map: map,
    afterParse: function (doc) {
        for (var i = 0; i < doc[0].placemarks.length; i++) {
            var p = doc[0].placemarks[i];
            google.maps.event.addListener(
                p.polygon,
                "click",
                function () { clickListener(p); }
            );
        }
    }
});
kml.parse(mapSettings.kmlLocation);

是否有任何方法可以(更可取)将正确的geoXML3 placemark可靠地传递到
clickListener
,或者(不可取)geoXML3.parser中的属性
I可以像使用Google Maps API kml解析器那样将click事件绑定到并接收
kmlMouseEvent
?最终,我需要能够更改多边形的样式,并在数组中跟踪它被选中/取消选中的情况。

使用函数闭包将placemark与事件侦听器关联。一种方法(也可以使用匿名函数):

kml=new geoXML3.parser({
suppressInfoWindows:对,
地图:地图,
后解析:函数(doc){
对于(var i=0;i
kml = new google.maps.KmlLayer(mapSettings.kmlLocation, {
    suppressInfoWindows: true,
    preserveViewport: false,
    map: map
});
google.maps.event.addListener(
    kml,
    "click",
    clickListener
};
kml = new geoXML3.parser({
    suppressInfoWindows: true,
    map: map,
    afterParse: function (doc) {
        for (var i = 0; i < doc[0].placemarks.length; i++) {
            var p = doc[0].placemarks[i];
            clickablePolygon(p);
        }
    }
});
kml.parse(mapSettings.kmlLocation);
function clickablePolygon(p) {
  google.maps.event.addListener(
    p.polygon,
    "click",
    function () { clickListener(p); }
  );
}