我正在做一些工作,将使用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函数时, this 的上下文是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 *函数中获取对父类的引用,或者是否有另一种方法可以将其连接起来?
答案 0 :(得分: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