javascript: доступ к счетчику циклов во вложенных обратных вызовах - PullRequest
0 голосов
/ 04 января 2011

Я пытаюсь получить доступ к индексу lopp во вложенных обратных вызовах.Вот код:

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);


                }
            });
        }
    }
},

Я знаю, что это все о понимании обратных вызовов и областей переменных, но я прошу вашей помощи, так как это моя первая проблема с обратным вызовом:)

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Ваш обратный вызов уже имеет доступ к i из-за замыканий, но он имеет "ссылку" на переменную, поэтому значение может быть не тем, которое вы хотите, так как оно всегда будет самым последним и самым большим, если выесли для обратного вызова используется значение, если i при вызове results.geocoder.getLatLng необходимо создать копию i с помощью другой анонимной функции:

(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
1 голос
/ 04 января 2011
GEvent.addListener(marker, "click", function (loopIndex) {
  return function () {
    // the variable "loopIndex" will have the value of i
    marker.openInfoWindowHtml("<b>""</b><br/>");
  }
}(i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...