1

私は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);
};

これによりメモリリークが発生しますか?また、必要なデータを他の手法でコールバック関数に渡すことはできますか?

4

1 に答える 1