私はGoogleマップのカスタムオーバーレイ、特にOverlayViewクラスで遊んでいます。多くのトラブルとデバッグの結果、OverlayView(MVCObjectから派生)の「map」プロパティを他のMVCオブジェクトにバインドするときに不整合が生じる可能性があると結論付けました。
これがバグなのか、それとも私が何か重要なものを見逃しているだけなのかはわかりません。ただし、MVCObjectの結果と比較してOverlayViewの結果が奇妙になるテストシナリオを設定しました。テストシナリオは次のようになります。
var o = new google.maps.MVCObject()
var x = new google.maps.OverlayView();
x.bindTo("map", o);
o.set("map", myMap);
setTimeout(function () { o.set("map", null); }, 500);
setTimeout(function () { alert("Map is null: " + (x.get("map") == null)); }, 1000);
bindTo呼び出しの後で私が理解していることから、どちらかが変更された場合、「map」プロパティ値は2つのオブジェクト間で伝播するはずです。ただし、これに対してテストを実行すると、「マップはnull:false」になり、これは仮定と矛盾します。
何らかの理由で、setTimeoutを介して呼び出しを遅らせる場合にのみ機能しますが、OverlayViewのバグであるという方向に私を投げかけるのは、テストコードのOverlayViewタイプを通常のMVCObjectに変更すると正しい答えが得られることです。また、プロパティ名を変更すると機能するため、これは「マップ」プロパティのみのようです。
ここに何かアイデアはありますか?複数のブラウザでテストしましたが、結果は同じです。