2009-05-06 13 views
5

Bazı Google Haritalar/Javascript sorunları yaşıyorum. Sanırım sorunun ne olduğunu biliyorum ama sadece bir yolu bilmiyoruz.Google Maps Sorun: Kapanış ve Referansa Göre Göster

Sorunumun bir örneği here. Tıkladığınız herhangi bir işaret varsa, ikinci gösterilir. Açıkçası, yanlış bilgiyi olay dinleyicime aktarıyorum ama kodu doğru göremiyorum.

Öncelikle burada benim kod kısmını oluşturuyor: İşte bir kod azaltmak kısmı var

if (GBrowserIsCompatible() && mapResults != null) { 
    // Read in the JSON 
    var mapDetailsArray = loadJSON(); 

    // Create a map 
    var map = new google.maps.Map2(document.getElementById(elementId)); 
    map.setCenter(new google.maps.LatLng(mapDetailsArray[0].getLatitude(), 
     mapDetailsArray[0].getLongitude()), 13); 
    map.addControl(new google.maps.SmallMapControl()); 

    // Add the points and center 
    var mgr = new google.maps.MarkerManager(map); 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < mapDetailsArray.length; i++) { 
    var mapDetails = mapDetailsArray[i]; 

    var point = new google.maps.LatLng(mapDetails.getLatitude(), mapDetails 
     .getLongitude()); 
    bounds.extend(point); 

    // Create our marker 
    var marker = new google.maps.Marker(point); 

    // What action do we use to show the hover 
    var infoAction = "mouseover"; 

    marker.value = mapDetails; 

    google.maps.Event.addListener(marker, infoAction, function() { 
     alert(marker.value); 
     map.openInfoWindowHtml(point, getResultInfoContent(marker.value)); 
    }); 

    mgr.addMarker(marker, 1); 
    } 
    mgr.refresh(); 
} 

"marker.value" her zaman mapDetails ne son değer olarak set biter. Eğer bir şey varsa, döngü bittiğinde, bu değerin yine de gitmemesi gerektiği gibi “tanımsız” olmasını isterdim. Çeşitli farklı değerler denedim (örneğin, marker.value = i + 1;) ancak yine de her iki nokta için de aynı değer olarak çıkacaktır.

Doğru değerleri olay dinleyicisine nasıl iletebileceğimi bilen var mı?

cevap

6

Değişim bu: Buna

google.maps.Event.addListener(marker, infoAction, function() { 
     alert(marker.value); 
     map.openInfoWindowHtml(point, getResultInfoContent(marker.value)); 
    }); 

:

google.maps.Event.addListener(marker, infoAction, (function(marker, point, map) { return function() { 
     alert(marker.value); 
     map.openInfoWindowHtml(point, getResultInfoContent(marker.value)); 
    }})(marker, point, map)); 

İstediğin kapatılması yaratacaktır. netlik için ayırın;

:

var f = function(marker, point, map) 
{ 
    return function() 
    { 
     alert(marker.value); 
     map.openInfoWindowHtml(point, getResultInfoContent(marker.value)); 
    } 
} 

google.maps.Event.addListener(marker, infoAction, f(marker, point, map)); 
+0

. Şerefe Greg. Daha önce böyle bir şey denedim ama eksi dönüş işlevi() {...} kodu sarar. –

+0

Aynı sorunu yaşadım ve aynı düzeltmeyi kullandım. Bunun gerçekten Javascript'te bir hata olduğunu hissediyorum. – SingleNegationElimination

+0

Bunun bir hata olduğunu düşünmüyorum, sadece çok sezgisel değil – Greg

3

yukarıdaki cevabı olsa çok sezgisel değil - Greg dediği gibi.

Bir nesneye bir olay eklediğinizde, bu nesne kapatılır, böylece kapağın içinde "bu" ile erişebilirsiniz. "Marker.value" yerine "this.value" ile değiştirdiyseniz, sorununuz çözülmüş olurdu. Daha şeyleri bir yere geçmek gerekirse, nesneye kravat ve aşağı pass:

marker.a = 1 
marker.b = 2 
marker.c = 3 

1 ve benzeri olacak this.a kapatılması içinde .. hile yaptı