Javascript 谷歌地图API v3-为什么没有事件上下文?

Javascript 谷歌地图API v3-为什么没有事件上下文?,javascript,events,google-maps-api-3,Javascript,Events,Google Maps Api 3,第一次使用GoogleMapsAPIv3,我得到了一个带有大量标记的地图。我希望这样,当您单击一个时,将显示一个特定的信息窗口(特定于您单击的标记)。我真的很惊讶点击事件没有告诉你点击的实际标记 我知道有一个解决方案使用一个单独的方法来创建一个闭包,但这对我来说似乎是一个黑客。有更好的方法吗?或者,是否有方法询问映射“此位置存在哪些标记”并从事件参数传入该位置 我希望事件能像这样进行: google.maps.event.addListener(marker, 'click', function

第一次使用GoogleMapsAPIv3,我得到了一个带有大量标记的地图。我希望这样,当您单击一个时,将显示一个特定的信息窗口(特定于您单击的标记)。我真的很惊讶点击事件没有告诉你点击的实际标记

我知道有一个解决方案使用一个单独的方法来创建一个闭包,但这对我来说似乎是一个黑客。有更好的方法吗?或者,是否有方法询问映射“此位置存在哪些标记”并从事件参数传入该位置

我希望事件能像这样进行:

google.maps.event.addListener(marker, 'click', function(event, obj)
{
    //Now I can work with "obj" - the thing that was clicked.
});
function createMarker (point, map)
{
    var marker = new google.maps.Marker({
            position: point,
            map: map,
            title: "blah"});

    marker.stuffOnTheMarker = "Some interesting stuff";

    var content = buildSomeContentForThisMarker ();

    google.maps.event.addListener(marker, 'click', function() {
            infowindow.close ();
            infowindow.setContent(content); 
            infowindow.open(map,marker);

            // access the marker than caused this event
            alert (marker.stuffOnTheMarker);
        });
}

我认为根据单击事件的位置来查找标记对象是错误的。对我来说,使用闭包将事件与特定标记关联似乎是一个有效的解决方案。我将创建一个如下所示的函数:

google.maps.event.addListener(marker, 'click', function(event, obj)
{
    //Now I can work with "obj" - the thing that was clicked.
});
function createMarker (point, map)
{
    var marker = new google.maps.Marker({
            position: point,
            map: map,
            title: "blah"});

    marker.stuffOnTheMarker = "Some interesting stuff";

    var content = buildSomeContentForThisMarker ();

    google.maps.event.addListener(marker, 'click', function() {
            infowindow.close ();
            infowindow.setContent(content); 
            infowindow.open(map,marker);

            // access the marker than caused this event
            alert (marker.stuffOnTheMarker);
        });
}

当API提供时,这是一种什么样的黑客行为?你所描述的是一个黑客。单击标记时,它将传递一个包含lat和lng的事件

google.maps.event.addListener(marker, 'click', function(e) {
  console.log(e); // { x: 0, y: 0 }
});

您应该只在事件侦听器中引用“this”

google.maps.event.addListener(marker, 'click', function(e) {
  // this == marker;
  // e == MouseEvent
});
mapInst是google和yandex地图上的包装器。在callbacak中可以使用这种方式

 //event drawing event
mousemoveDraw(event : any){
    console.log('mousemoveDraw')
    console.log(this)
    console.log(this.stateDrawing)
    try{
        if (this.stateDrawing != 1){
            console.log(this.stateDrawing)
            let lat = event.latLng.lat();
            let lng = event.latLng.lng();
            console.log(lat,lng)
            this.polyLine.pushCoord({ lat, lng });
        }
    }catch(e){
        console.log('error Polyline.mousemoveDraw : ',e.message);
    }
}

好吧,我想这似乎是唯一的办法,但感觉真的很脏。我想知道为什么他们没有实现他们的事件,所以你可以这样做:google.maps.event.addListener(marker,'click',function(event,obj){…}),其中“obj”是导致事件的原因。我猜是因为闭包给了你这个。您可以从单击事件回调访问标记。(更新答案)不,我所描述的根本不是黑客行为——看我更新的问题,也许我不清楚。谢谢你的意见。这就是我一直在寻找的,我考虑过,但没有尝试!谢谢。你能翻译一下那个评论吗?