Область действия переменной: не видно в функции обратного вызова - PullRequest
0 голосов
/ 28 апреля 2011

В принципе, у меня есть несколько друзей, которых я хочу:
- посмотреть на карте
- список в таблице

У меня есть цикл в списке друзей, для каждой итерации I:
- создать маркер карты Google
- добавить друга в список

ПЕРВАЯ ПРОБЛЕМА : для маркера я добавляю прослушиватель событий, чтобы иметь возможность отображать информационное окно.Я использую заголовок маркера, чтобы иметь возможность получать информацию о друге ... это всего лишь глупая ошибка, поскольку в методе ajax для извлечения друга неизвестно "id".Это моя первая проблема.Я хотел бы иметь возможность использовать заголовок для реального заголовка (не идентификатор) и суметь получить идентификатор внутри обратного вызова ajax другим способом.

ВТОРАЯ ПРОБЛЕМА Для спискаЯ добавляю запись "li" для каждого друга и добавляю прослушиватель событий в ссылку li.a, чтобы можно было отобразить сведения о друге.«id» также не виден.

Эти две проблемы относятся к одной фамилии.

Ниже приведен код, который я сделал.Очевидно, что-то не так, но я не могу понять, что мне нужно изменить, чтобы получить доступ к идентификатору в функциях обратного вызова.

примечание: я использую jquery mobile для приложения HTML5.

for(j=0;j<friends.length;j++){
      var lat = friends[j][1];
      var long = friends[j][2];
      var id = friends[j][3];
      var latLng = new google.maps.LatLng(lat,long);
      var marker = new google.maps.Marker({ position: latLng,
                               map: map,
                               title: id
                              });

      // Add friends to list
      $("#friend_list ul").append('<li><a id="details' + id + '" rel="external" data-transition="slide">' + id + '</a></li>');

      // Add event handler when details:id is clicked
      $('#details' + id).click(function(){
        alert(id + ' clicked');   // DOES NOT WORK AS ID IS NOT KNOWN IN THIS METHOD
      });

      // Add listener on click action for marker created above
      // I PASS THE TITLE OF SELF AS ID IS NOT KNOWN IN THIS METHOD
      // IF I use: url: "/friend/" + id => ONLY THE LAST VALUE OF THE ID IS TAKEN INTO ACCOUNT 
      google.maps.event.addListener(marker, 'click', function() {
        self = this;
        $.ajax({
          url: "/friend/" + self.title,  
          success: function(details){
            var message = details["lastname"] + ' ' + details["firstname"];
            var infowindow = new google.maps.InfoWindow(
              { content: message,
                size: new google.maps.Size(50,50)
              }
            );
            infowindow.open(map,self);
          }
        });
      });
    }

Любое представление о том, чтоможет быть не так?

Ответы [ 3 ]

1 голос
/ 28 апреля 2011
//Here is how the ids can be picked off of the list items when clicked:
//...your..loop
var id = friends[j][3];

$('#friendlist').append('<li><a href="#" id="details'+ id +'">Friend</a></li>')
$('#details'+id).click(function() { alert(this.id.replace('details',''))})

//and for the gmarker:
var latLng = new google.maps.LatLng(lat,long);
var gmarker = new google.maps.Marker({ position: latLng,title: 'desired title here' });

//then create a secondary id for the marker -- sort of hash?
//simple case - each marker has unique latlng, so just concat them n do:
//based on Marino Šimić's trick
document[''+lat+''+long] = id

GEvent.addListener(gmarker, "click", function(marker, latlng) {
    alert('marker id:'+document[''+latlng.lat()+''+latlng.lng()] ) //your desired id here
});

//and then add the marker to the map
map.addOverlay(gmarker);
1 голос
/ 28 апреля 2011

Я не прочитал вам всю проблему, потому что мне нужно поторопиться, но

объект документа всегда виден в области видимости

если вы используете

 document["something"] = id;

вы сможете получить

var something = document["something"];

откуда угодно

не то, чтобы это было хорошее дизайнерское решение иметь все в объекте документа, но сообщить вам;)

0 голосов
/ 28 апреля 2011

Разве маркер не является переменной для маркера карт Google?

Таким образом, вы можете получить доступ к marker.title, чтобы получить идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...