2011-01-04 18 views
0

ネストされたコールバックのloppインデックスにアクセスしようとしています。ここ はコードです:javascript:ネストされたコールバックのループカウンタへのアクセス

gatherAddresses: function(){ 
    var divs = $('#searchResults .address'); 
    var addrs = []; 
    for (var i = 0; i < divs.length; i++) { 
     if (divs[i].className == 'address') { 
      var address = $.trim($(divs[i]).html()); 
      var rel = divs[i].getAttribute('rel'); 
      results.addresses.push({ 
       address: address, 
       rel: rel 
      }); 
      results.geocoder.getLatLng(address, function(point){ 

       if (!point) { 
        alert(address + ' not found'); 
       } 
       else { 
        var marker = new GMarker(point); 

        //chmurka :) 
        GEvent.addListener(marker, "click", function(){ 

/////////////here I want the loop index 

         marker.openInfoWindowHtml("<b>""</b><br/>"); 
        }); 
        results.map.addOverlay(marker); 
        addrs.push({ 
         rel: results.findRel(address), 
         point: point 
        }); 
        results.findCenter(addrs, results.map); 


       } 
      }); 
     } 
    } 
}, 

私はそれがコールバックを理解することについてのすべてを知っていると変数がスコープが、それは私の最初のコールバックの問題:)ですので、私はあなたの助けを求める

答えて

3

あなたのコールバックは、すでにへのアクセス権を持っていますiクロージャのために、しかしそれは変数への "参照"を持っていますので、もし値がならresults.geocoder.getLatLngの場合には、コールバックにその値を使用させたい場合には、他の経由でiのコピーを作成する必要があると呼ばれました、anonymou機能:

(function(e) { // get a copy of the value that WON'T change 
    GEvent.addListener(marker, "click", function(){ 
    // use e here as the index 
    }); 
})(i); // pass the value of i in 
+0

素晴らしい!私も前の関数をラップし、私は私がいる!ありがとう – greg606

1
GEvent.addListener(marker, "click", function (loopIndex) { 
    return function() { 
    // the variable "loopIndex" will have the value of i 
    marker.openInfoWindowHtml("<b>""</b><br/>"); 
    } 
}(i)); 
関連する問題