簡體   English   中英

Javascript 關閉與 google.maps.Geocoder::geocode

[英]Javascript Closure with google.maps.Geocoder::geocode

我正在使用 google.maps javascript API v3。 我需要將一組公民地址轉換為帶有“點擊”偵聽器的谷歌 map 上的標記。 當用戶單擊 map 中的標記時,我希望另一個 window 打開與該地址相關的 url (另一個選項卡將是理想的)。

我無法保持地址和 url 之間的關系,因為我正在使用 javascript Closure 和谷歌方法 geocode()。

我有一組地址,例如

var addresses = [ '123 street street', '124 street street' ];  
var urls = [ 'www.example.com/1', 'www.example.com/2' ];

然后我使用 API 對 map 進行地理編碼和創建標記

for (var i = 0; i<addresses.length; i++)
{
    var address = addresses[i];
    var url = urls[i];
    geocoder.geocode(
        { 'address' : address },
    function(result, status) {
       var x = url // url == ""

       var marker = new google.maps.Marker({
          position: result[0].geometry.location,
          map: map,
          title:"Test"
       });

       google.maps.event.addListener(marker, 'click', function(event){
          alert(url);
          window.open(url);
       },false);
    }
}

在匿名 function 中,我該如何使用var url

似乎解決方案是將所有內容拆分為單獨的功能。

function showAddress() {

    //geocoder = new Geocoder();

    for (var i = 0; i<addresses.length; i++)
    {
        var address = addresses[i];
        var url = urls[i];

        findAddress(address,url);
        pausecomp(400);
      }
}

function findAddress(address,url)
{
    geocoder.geocode(
        { 'address' : address },
        function(result, status) {
            var marker;
            if(status == google.maps.GeocoderStatus.OK) {
                marker = new google.maps.Marker({
                    position: result[0].geometry.location,
                    map: map,
                    title:"Longueuil"
                });

            }
            attachUrl(marker, url);
        }
    );
}

function attachUrl(marker, url)
{
    google.maps.event.addListener(marker, 'click', function(event){
        alert(url);
        window.open(url);
    },false);
}

我的猜測是 function 調用會創建變量持有的值的持久副本,而不僅僅是指向它們的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM