2010-07-14 53 views
0

我想要顯示infowindow,每個多邊形都有自己不同於excel表格的內容,但是我的代碼顯示了excel的最後一行excel的內容與所有多邊形的內容相同最後一個信息窗口顯示在數組中的所有多邊形

請任何人都可以解決這個問題嗎? 在此先感謝。

for(m=0; m < array.length; m++) 
{ 
    var lat = array[m][1]; 
    var lon = array[m][2]; 
    var latOffset = 0.5; 
    var lonOffset = 2; 
    var latOffset2 = 0.5; 
    var lonOffset2 = 2; 
    var polygon = new GPolygon([ 
    new GLatLng(lat , lon), 
    new GLatLng(lat - latOffset2, lon + (lonOffset-1)), 
    new GLatLng(lat - latOffset2, lon - (lonOffset-1)), 
    new GLatLng(lat , lon), 
    ], "#ff0000", 0.1 , 0.9, "#ff0000", 0.9); 

    a=array[m][1]; 
    b=array[m][2]; 
    c=array[m][0]; 
    f=array[m][3]; 
    h=array[m][4]; 
    s=array[m][6]; 
    bsc=array[m][5]; 

    GEvent.addListener(polygon, "click", function(overlay,lat,lon) 
    { 
     map.openInfoWindowHtml(overlay,"Site"+ s +"<br>"+"BSC"+ bsc +"<br>"+"Cell"+ c +"<br>"+"Cell lattitude"+ lat +"<br>"+"Cell longitude" + lon + "<br>"+"Freq"+ f +"<br>"+"Height"+ h);}); 

     map.addOverlay(polygon); 
    } 
} 

回答

1

您有在addListener方法a very common closure problem

變量從addListener方法click回調被調用時封閉在一個封閉共享同一個環境,所以,循環將已經走完了其歷程和變量sbsccfhlatlon將指向array中最後一個元素的值。

你可以用更倒閉解決它,使用函數工廠:

function makeInfoWindowEvent(map, overlay, s, bsc, c, lat, lon, f, h) { 
    return function() { 
     map.openInfoWindowHtml(overlay, 
          "Site"+ s +"<br>"+"BSC"+ bsc +"<br>"+ 
          "Cell"+ c +"<br>"+"Cell lattitude"+ lat +"<br>"+ 
          "Cell longitude" + lon + "<br>"+"Freq"+ f +"<br>"+ 
          "Height"+ h); 
    }; 
} 

// ... 

for(m = 0; m < array.length; m++) { 

    // ... 

    GEvent.addListener(polygon, "click", 
     makeInfoWindowEvent(map, polygon, s, bsc, c, lat, lon, f, h) 
    ); 
} 

這可以說是相當棘手的話題,如果你不熟悉如何關閉工作。您可以檢查出以下Mozilla的文章作一簡要介紹:

相關問題