Javascript 谷歌地图侦听器上下文

Javascript 谷歌地图侦听器上下文,javascript,google-maps-api-3,scope,Javascript,Google Maps Api 3,Scope,我需要一个谷歌地图标记来响应由地图触发的事件(空闲)。该事件触发一个函数。这个函数应该作用于标记,但当然,“This”指的是地图。如何在函数内部引用设置事件侦听器的标记 每个标记将向映射添加一个空闲侦听器。我可以跟踪所有的标记,在一个Map空闲事件中,循环遍历它们并触发函数,但我希望使用一种更禅的方法 我目前的方法是: var self=newMarker; google.maps.event.addListener(window.gmap,'idle',function(){ self

我需要一个谷歌地图标记来响应由地图触发的事件(空闲)。该事件触发一个函数。这个函数应该作用于标记,但当然,“This”指的是地图。如何在函数内部引用设置事件侦听器的标记

每个标记将向映射添加一个空闲侦听器。我可以跟踪所有的标记,在一个Map空闲事件中,循环遍历它们并触发函数,但我希望使用一种更禅的方法

我目前的方法是:

var self=newMarker;
google.maps.event.addListener(window.gmap,'idle',function(){
    self.setVisible(false); });

但它似乎只适用于1个标记。“newMarker”是我试图从事件内部访问的标记对象,正如我所说的,有多个标记,因此我不能将其存储在全局变量或任何东西中。

我可以为您查看两个基本选项:

1-创建标记的
数组
,实现一个传递给
addListener
函数
,然后在事件触发函数回调时循环标记:

var markerList = new Array();
//build the markers and add them to markerList with multiple calls to push...
google.maps.event.addListener( window.gmap, "idle", function() {
    for ( var i = 0; i < markerList.length; i++ ) {
        markerList[i].setVisible( false );
    }
});
就我自己而言,我总是选择选项1,并且我坚持这种方法。我担心将许多侦听器附加到映射会降低性能。此外,它还包括在谷歌代码原型中捣乱


但这是一个有趣的想法。如果您尝试这样做,请让我知道它的性能以及对您的影响。

使用jQuery的“代理”

解决方案1对我不起作用,我正在尝试避免此应用程序中的JS循环。
google.maps.Marker.prototype.idleCallback = function() {
    this.setVisible( false );
};

var newMarker1 = new google.maps.Marker( opts1 );
google.maps.event.addListener( window.gmap, "idle", newMarker1.idleCallback );
var newMarker2 = new google.maps.Marker( opts2 );
google.maps.event.addListener( window.gmap, "idle", newMarker2.idleCallback );
//and repeat for each marker; you get the idea