2012-03-07 9 views
0

Googleマップとそのマーカーを扱うjQueryクラスがあります。 各マーカーを作成した後、私は、各マーカーのクリックリスナーを追加します。Googleマップのクラスメソッドを呼び出そうとしています。jQueryのマーカークリックイベントコールバック

var marker = new google.maps.Marker(options); 
google.maps.event.addListener(marker, "click", function(event) { 
    //Do something with event 
}); 

しかし、私が代わりにクラスの機能を使用したい:

google.maps.event.addListener(marker, "click", this.onVehiculeClick.bind(this)); 
onVehiculeClick: function(event) { 
    console.log(this); 
    console.log(event); 
    //Do something with event 
} 

これは、Firefoxでうまく機能しているとクロム:それはログこの(私のオブジェクト)とGoogleマップのイベントです。 SafariやIEではなく、Firefoxの他のバージョンでもonVehiculeClickメソッドは呼び出されず、google.maps.event.addListenerの直後にconsole.logを追加すると何も出力されません。

私は.bind(この)部分を削除した場合、メソッドが呼び出されるが、私はこのがGoogleマップオブジェクトを表しますこのコンテキストとを失っています。また、var = thisをコンストラクタに追加しようとしましたが、メソッドコンテキストでは未定義です。

Google Maps JS API v3: Need to access Marker Object from inside the Event Handler私はここで助けてくれると思われるものを見つけましたが、プロトタイプを使用していて、jQueryでカレーメソッドと同等のものを見つけることができません。

ありがとうございました!

+0

あなたはライブラリを使用していますか? .bindはIE <9、Safari、またはFirefox <4ではネイティブでサポートされていません。シムについてはhttps://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Function/bindを参照してください。より多くのコードやリンクを提供すれば、簡単に解決できると確信しています。 – puckhead

+0

私はjQueryとjQuery Inheritのみを使用しています。あなたは* .bind *の回避策を知っていますか?もしかしたら、各マーカーのIDを取得してGoogleの代わりにjQueryバインディングを使うことができますか? – Yuukuari

+0

2時間前に私は自分自身に答えることができません。後でスクリプトを投稿します。あなたはここでそれを見つけることができます:http://www.2shared.com/document/gGg35IeU/gmap.htmlまたはhttp://uploading.com/files/c527addc/gmap.js/ – Yuukuari

答えて

0

はこれにあなたのaddVehicule方法を変更してみてください:

addVehicule: function(vehicule) { 
    try { 
     var marker = this.addMarker(vehicule.latitude, vehicule.longitude); 
     var that = this; 
     //Observe clicks on vehicule 
     google.maps.event.addListener(marker, "click", function(event){ 
      that.onVehiculeClick(event) 
     }); 

     this.vehicules.push(vehicule); 
    } catch (error) {} 
} 
+0

それは働いている!ありがとうございます:)コンストラクタメソッドで* var = this *を設定しようとしましたが、同じ方法で使用しましたが、動作しませんでした。メソッドの文脈でどうやって宣言しなければならないのでしょうか? – Yuukuari

+0

コンストラクタで宣言すると、 'that'はコンストラクタでのみ使用できます。このメソッドで宣言することで、clickイベントでも使用できます。 – puckhead

関連する問題