Google Maps API v2 を使用するレガシー プロジェクトを v3 に変換する作業を行っています。
次のような Dojo クラスがあります。
dojo.declare
(
"MyNamespace.MapControl",
null,
{
constructor: function() {
var mapElement = document.getElementById("map");
this._map = new google.maps.Map(mapElement, {});
google.maps.event.addListenerOnce(this._map, "idle", this.map_load);
},
map_load: function() {
this.onLoad();
},
onLoad: function () { }
}
);
問題は、map_load 関数が呼び出されると、このコンテキストがクラスではなく Google マップになることです。
クラス内にローカル変数selfを作成して使用してみました
_self = this;
コンストラクター内にありますが、変数には onLoad 関数がありません。これを使用したコードは次のとおりです。
dojo.declare
(
"MyNamespace.MapControl",
null,
{
_self: null,
constructor: function() {
var mapElement = document.getElementById("map");
this._map = new google.maps.Map(mapElement, {});
google.maps.event.addListenerOnce(this._map, "idle", this.map_load);
_self = this;
},
map_load: function() {
_self.onLoad(); // fails as onLoad is undefined
},
onLoad: function () { }
}
);
Dojo 内で *map_load* 関数内の親クラスへの参照を取得できる方法はありますか、またはこれを接続する別の方法はありますか?