Javascript OpenLayers映射事件无法调用方法
我想对Openlayers映射事件做出反应,但在发出事件时调用类方法有问题。相关代码段如下所示:Javascript OpenLayers映射事件无法调用方法,javascript,openlayers,Javascript,Openlayers,我想对Openlayers映射事件做出反应,但在发出事件时调用类方法有问题。相关代码段如下所示: function OpenLayersMap(divname) { var osmLayer = new OpenLayers.Layer.OSM("Open Street Maps"); var gmLayer = new OpenLayers.Layer.Google("Google Maps"); this.proj = new OpenLayers.Projection("EP
function OpenLayersMap(divname) {
var osmLayer = new OpenLayers.Layer.OSM("Open Street Maps");
var gmLayer = new OpenLayers.Layer.Google("Google Maps");
this.proj = new OpenLayers.Projection("EPSG:4326");
this.map = new OpenLayers.Map(
{
div: divname,
allOverlays: false,
theme: null,
controls:
[
new OpenLayers.Control.Attribution(),
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.MousePosition(
{
displayProjection: this.proj
}
),
new OpenLayers.Control.KeyboardDefaults()
],
eventListeners:
{
'moveend' : this.moved,
'zoomend' : this.zoomed
}
}
);
this.map.addLayers([osmLayer, gmLayer]);
this.map.setCenter(new OpenLayers.LonLat(8.56, 50).transform(
this.proj,
this.map.getProjectionObject()),
10
);
this.updateMapData();
}
OpenLayersMap.prototype = {
constructor : OpenLayersMap,
updateMapData : function() {
console.log("updateMapData!!!!!!!!");
// Some more stuff
},
moved : function(event) {
console.log("Map has been moved!");
this.updateMapData(); // Line 94
},
zoomed : function(event) {
console.log("Zoom has been used!");
this.updateMapData();
}
}
加载页面后的firebug输出:
Map has been moved!
Uncaught Type error: Object #<Object> has no method 'updateMapData'
Map has been moved!
Uncaught Type error: Object #<Object> has no method 'updateMapData'
OpenLayersMap.moved (ol.js:94)
OpenLayers.Events.OpenLayers.Class.triggerEvent (OpenLayers-2.11-min.js:400)
OpenLayers.Map.OpenLayers.Class.moveTo (OpenLayers-2.11-min.js:499)
OpenLayers.Map.OpenLayers.Class.setCenter (OpenLayers-2.11-min.js:473)
OpenLayers.Map.OpenLayers.Class.updateSize (OpenLayers-2.11-min.js:464)
(anonymous function) (OpenLayers-2.11-min.js:158)
地图已被移动!
未捕获类型错误:对象#没有方法“updateMapData”
地图被移动了!
未捕获类型错误:对象#没有方法“updateMapData”
OpenLayersMap.moved(ol.js:94)
OpenLayers.Events.OpenLayers.Class.triggerEvent(OpenLayers-2.11-min.js:400)
OpenLayers.Map.OpenLayers.Class.moveTo(OpenLayers-2.11-min.js:499)
OpenLayers.Map.OpenLayers.Class.setCenter(OpenLayers-2.11-min.js:473)
OpenLayers.Map.OpenLayers.Class.updateSize(OpenLayers-2.11-min.js:464)
(匿名函数)(OpenLayers-2.11-min.js:158)
因此会调用moved方法,但不会调用updateMapData方法。如果删除eventListeners部分,则构造函数端的updateMapData调用将成功
有人能告诉我为什么不能调用这个方法吗
提前谢谢 我找到了解决问题的方法,但我不完全明白问题是什么。所以请随意评论我的解决方案,或者用更好的解决方案来回答
var self = this;
//...
eventListeners:
{
'moveend' : function(event) { self.moved(event); },
'zoomend' : function(event) { self.zoomed(event); }
}
//...
我怀疑在创建对象时,OpenLayerMap的原型方法(例如moved)是未知的。我找到了解决问题的方法,但我不完全理解问题所在。所以请随意评论我的解决方案,或者用更好的解决方案来回答
var self = this;
//...
eventListeners:
{
'moveend' : function(event) { self.moved(event); },
'zoomend' : function(event) { self.zoomed(event); }
}
//...
我怀疑在创建对象时,OpenLayerMap的原型方法(例如moved)是未知的