2011-04-27 2 views
0

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

У меня есть цикл в списке друзей, для каждая итерация 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); 
      } 
     }); 
     }); 
    } 

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

ответ

0

Является ли маркер не переменной для маркера Google Maps?

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

+0

@mcnemesis я marker.title доступа, чтобы получить идентификатор, потому что я установил «название: id "в параметрах маркера. Дело в том, что я бы хотел использовать заголовок маркера для чего-то другого, кроме id (например, имя). Установить идентификатор в названии - это единственный способ, с помощью которого я смог вернуть идентификатор позже, но это не то, что мне нужно. – Luc

+0

ahh Я понимаю. Возможно, вы захотите изменить свой вопрос, чтобы сделать это более понятным. – dkarzon

+0

Я обновил код. – Luc

1
//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); 
+0

Отлично, спасибо за список материалов. Что касается материала маркера, я добавил вас в комментарий, который я сделал выше, поскольку это не то, что мне нужно, поскольку я хотел бы использовать заголовок для чего-то другого, кроме id. – Luc

+0

хорошо, тогда ответьте? – nemesisfixx

+0

спасибо, я не видел вашего обновления. – Luc

1

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

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

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

document["something"] = id; 

вы будете в состоянии получить

var something = document["something"]; 

из любой

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

+0

@ marino-simic, это хороший трюк, я проверю это. Большое спасибо. – Luc

+0

@ marino-simic это тоже не работает, учитывается только последнее значение документа ["current_id"] – Luc

Смежные вопросы