0

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* 関数内の親クラスへの参照を取得できる方法はありますか、またはこれを接続する別の方法はありますか?

4

1 に答える 1

1

使用dojo.hitch(/*Object*/ scope, /*Function|String*/ method):

google.maps.event.addListenerOnce(this._map, "idle", dojo.hitch(this, "map_load"));

詳細については、http://livedocs.dojotoolkit.org/dojo/_base/lang#hitchを参照してください。

于 2012-08-25T10:38:39.680 に答える