В принципе, у меня есть несколько друзей, которые я хочу:
- видеть на карте
- список в таблицеПеременный объем: не видел в функции обратного вызова
У меня есть цикл в списке друзей, для каждая итерация I:
- создать Google Maps маркер
- добавить друга в список
ПЕРВАЯ ПРОБЛЕМА: для маркера я добавить прослушиватель событий, чтобы иметь возможность отображать InfoWindow. Я использую заголовок маркера для получения информации о другом ... это всего лишь глупое wokaround, потому что «id» не известно в рамках метода ajax, получающего друга. Это моя первая проблема. Я хотел бы иметь возможность использовать заголовок для реального названия (а не идентификатор) и управлять идентификатором в обратном вызове ajax по-другому.
ВТОРАЯ ПРОБЛЕМА Для этого я добавляю запись «li» для каждого друга и добавляю прослушиватель событий на ссылку li.a, чтобы иметь возможность отображать детали друга. «id» также не встречается.
Эти 2 проблемы одного семейства.
Ниже приведен код, который я сделал. Очевидно, что-то не так, но не может понять, что мне нужно изменить для доступа к идентификатору в функциях обратного вызова.
примечание: я использую 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);
}
});
});
}
Любая идея о том, что может быть неправильным?
@mcnemesis я marker.title доступа, чтобы получить идентификатор, потому что я установил «название: id "в параметрах маркера. Дело в том, что я бы хотел использовать заголовок маркера для чего-то другого, кроме id (например, имя). Установить идентификатор в названии - это единственный способ, с помощью которого я смог вернуть идентификатор позже, но это не то, что мне нужно. – Luc
ahh Я понимаю. Возможно, вы захотите изменить свой вопрос, чтобы сделать это более понятным. – dkarzon
Я обновил код. – Luc