2011-04-27 19 views
0

を見ていない基本的に、私は私がしたいことを、いくつかの友人があります
を - 地図
で見る - リストの表の変数のスコープ:コールバック関数内で

私は、フレンドリスト上のループを持っています各反復I:
- Googleマップのマーカー
を作成 - リストに

最初の問題友人を追加します。マーカーのために私は、情報ウィンドウを表示することができるようにイベントリスナーを追加します。私は友人の情報を取得するためにマーカーのタイトルを使用しています... "id"は友人を取得するajaxメソッドの中で知られていないので、それは愚かなwokaroundです。これが私の最初の問題です。私は実際のタイトル(IDではない)のタイトルを使用し、別の方法でajaxコールバック内のIDを取得することができるようにしたいと思います。

第2問題リストのために、友人の詳細を表示できるように、各友達に「li」エントリを追加し、li.aリンクにイベントリスナーを追加します。 "id"はどちらにも見られません。

これらの2つの問題は同じファミリのものです。

以下は私が行ったコードです。明らかに何か間違っていますが、コールバック関数内のアクセス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); 
      } 
     }); 
     }); 
    } 

何が間違っている可能性がありますか?

答えて

0

マーカーはGoogleマップマーカーの変数ではありませんか?

idを取得するにはmarker.titleにアクセスできるはずです。

+0

@mcnemesis私は、「タイトルを設定するためのIDを取得するには、アクセスmarker.titleの操作を行います。 id "をマーカーオプションに追加します。物事はid(名前のようなもの)以外の何かのためにマーカーのタイトルを使用したいと思っています。後でIDを取得するために見つけた唯一の方法はタイトルのIDを設定することですが、これは私が必要とするものではありません。 – Luc

+0

ああ私はそれを得る。そのことをより明確にするために質問を編集したいかもしれません。 – 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

関連する問題