私は10.000以上の膨大な数のマーカーを使用しており、それらはすべてクリック可能である必要があります。現時点では、マーカーごとに個別のコールバック関数を作成しています。これは、必要なすべてのデータのクロージャーです。私は10.000関数の作成を阻止しようとしましたが、これはすべて同じことを行い、必要なデータを引数としてcb-functionに渡しますが、これは不可能のようです。
しかし、とにかくコールバック関数にデータを取得する方法があります。'this'は、cb-functionで、実際にクリックされたマーカーを指し、マーカーオブジェクトにアタッチすれば、必要なデータにアクセスできます。これは非常に汚れていますが、機能しているようです。
しかし、これはさらに問題を引き起こします。これがメモリリークを引き起こすとは思えません。obj.markerのようにマーカーが表すオブジェクトのマーカーを参照しますが、cb-functionのオブジェクトにアクセスするには、marker.objのようにオブジェクトを参照する必要があります。
// Callback function for clicks on markers
function cb(e){
console.log(e); // the event with information about marker position
console.log(this.obj); // the object the marker stands for
}
//add a eventListener to the marker which represents a object
this.initMarkerListener = function(obj) {
obj.marker.obj = obj; //the critical point
google.maps.event.addListener(obj.marker, 'click', cb);
};
これによりメモリリークが発生しますか?また、必要なデータを他の手法でコールバック関数に渡すことはできますか?