Openlayers 3 - 弹出 - 奇怪的错误

时间:2016-08-26 11:49:45

标签: javascript openlayers-3

我试图在OpenLayers 3地图上放一个简单的弹出窗口,我遇到了一个非常奇怪的错误。作为教程,我使用的是http://openlayers.org/en/latest/examples/popup.html?q=popup,我试图在我自己的地图上实现几乎相同的解决方案。地图初始化正确,但弹出窗口没有移动,当我点击我的地图时,我收到一个奇怪的AssertionError: Assertion failed: element should be defined javascript错误。

这是我使用的代码:

function Map(map) {
  var zoom=map.data('zoom'), center = map.data('center'), locations = map.data('locations'), nodes = map.data('nodes'), curMap = this;

  this.mapContainer=map;
  this.vectorSource = new ol.source.Vector({});
  this.map = null;
  this.polygons = {};
  this.locations = {};
  this.overlayPopup = new ol.Overlay(/** @type {olx.OverlayOptions} */ ({
    element: curMap.mapContainer.parent().find('popup').get(0),
    autoPan: true,
    autoPanAnimation: {
        duration: 250
    }
  }));

  if (center == '') center=[0,0];
  if (zoom == '') zoom=12;
  center=ol.proj.transform(center, 'EPSG:4326', 'EPSG:3857');

  this.mapContainer.addClass('map-inited');
  this.map =  new ol.Map({
    layers: [
      new ol.layer.Tile({
          source: new ol.source.OSM()
      }),
      new ol.layer.Vector({
          source: this.vectorSource
      })
    ],
    overlays: [this.overlayPopup],
    target: this.mapContainer.attr('id'),
    view: new ol.View({
      center: center,
      zoom: zoom
    })
  });

  this.map.on("singleclick", function(evt) {
    var coordinate = evt.coordinate;

    var features=[];
    curMap.map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
        features.push(feature);
    });
    console.log(features);

    curMap.overlayPopup.setPosition(coordinate);
});

}

在初始化之前,地图的HTML看起来像这样:

<div class="venture-map" style="" id="div-BCD82D60-27AE-CCBB-DF40-2AFFB1D4A5F9">
  <div class="map" style="" id="div-39529A9B-6C0C-2F36-5691-9F1A7BFA7878" data-locations="...." data-nodes="..." data-center="..." data-zoom="12"></div>
  <div class="popup" style="" id="div-3716827E-9A13-0912-EF0E-66B0E6E72145">
    <div id="popup-content"></div>
  </div>
</div>

控制台说错误来自<unknown>位置,但我确信curMap.overlayPopup.setPosition(coordinate);是触发此错误的行,就像我将其注释掉一样,不会触发错误。< / p>

奇怪的是,如果我完全复制链接上找到的相同代码,并在我自己的服务器上运行它,代码运行正常,没有错误。可能是什么问题呢?我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我的代码中有一个拼写错误。我打算在这一行中选择带有popup类的DOM元素:curMap.mapContainer.parent().find('popup').get(0‌​),但我忘记了弹出关键字之前的.,所以我选择了一个类型为弹出窗口(当然没有)。

感谢Jonatas Walker的帮助:)