2012-04-26 64 views
-1

我需要一個Google Maps Marker來響應地圖(空閒)觸發的事件。該事件觸發一個函數。這個函數是SUPPOSED用於標記的,但是當然,「this」是指地圖。如何在函數內部引用設置事件偵聽器的標記。Google地圖監聽器上下文

每個標記都會爲地圖添加一個空閒偵聽器。我可以跟蹤所有標記,並在Map Idle事件中循環並觸發該函數,但我希望採用更多的禪宗方法。

我目前的方法是這樣的:

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

但似乎只爲1點的標記工作。 「newMarker」是我試圖從事件內部訪問的標記對象,正如我所說有多個標記,所以我不能將它存儲在全局變量或任何東西中。

回答

0

我可以看到2個基本的選項供您:

1 - 創建標記的Array,實現通過標記一個function得到數據傳遞給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); 
    } 
}); 

2 - 添加一個新的回調函數的google.maps.Marker.prototype並多次調用addListener,以便每個標記都接收其自己的事件通知:

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 

我自己,我總是選擇1,我堅持這種做法。我擔心將許多聽衆附加到地圖上會拖慢性能。另外,它涉及到谷歌代碼原型。

但這是一個有趣的想法。如果你給這樣的一個去,請讓我知道它是如何執行的,以及它如何爲你制定。

+0

解決方法1不爲我工作,我試圖避免JS循環在此應用。 – DanRedux 2012-04-30 11:37:09