2011-04-27 80 views
0

基本上,我有幾個朋友,我想:
- 看地圖
上 - 名單表變量範圍:回調函數中沒有看到

我的好友列表上的循環,對每次迭代我:
- 創建一個谷歌地圖標記
- 添加好友列表中的

第一個問題:對於標記我添加事件偵聽器,以便能夠顯示信息窗口。我使用標記的標題能夠檢索朋友的信息...這只是一個愚蠢的wokaround,因爲在檢索朋友的ajax方法中不知道「id」。這是我的第一個問題。我希望能夠使用title作爲真正的標題(而不是id),並以另一種方式設法在ajax回調中獲取id。

第二個問題對於列表,我爲每個朋友添加一個「li」條目,並在li.a鏈接上添加一個事件監聽器,以便能夠顯示好友的詳細信息。 「身份證」也沒有被看到。

這兩個問題是相同的familly。

下面是我所做的代碼。顯然有些問題,但無法弄清楚我需要在回調函數中更改訪問ID。

注意:我使用jQuery的手機爲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

標記不是谷歌地圖標記的變量嗎?

所以你應該能夠訪問marker.title來獲得id。

+0

@mcnemesis我做訪問marker.title因爲我設置「的稱號,以獲得ID: ID「標記選項。事情是我想使用標記的標題除了id之外的其他名稱(例如名稱)。在標題中設置id是我發現能夠稍後獲取id的唯一方式,但這不是我所需要的。 – Luc 2011-04-27 22:46:23

+0

啊我明白了。你可能想編輯你的問題,使其更清楚。 – dkarzon 2011-04-27 22:51:06

+0

我更新了代碼。 – Luc 2011-04-28 12:17:46

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 2011-04-27 22:48:45

+0

那麼,接受一個答案? – nemesisfixx 2011-04-28 07:56:52

+0

謝謝,我沒有看到你的更新。 – Luc 2011-04-28 12:19:33

1

,因爲我需要抓緊時間,但

文檔對象總是處於範圍

可見,如果你使用

document["something"] = id; 

你會我沒有看到你整個問題能夠得到的

var something = document["something"]; 

從任何地方

並不在於它是一個很好的設計決策必須在文檔對象,而且讓你知道一切;)

+0

@ marino-simic,這是一個很好的技巧,我會檢查這個。非常感謝。 – Luc 2011-04-27 22:50:03

+0

@ marino-simic這也不起作用,只考慮文檔[「current_id」]的最後一個值 – Luc 2011-04-28 12:17:26