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 Map 而不是类。

我尝试在类中创建一个局部变量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 回答