首页 > 解决方案 > Leaflet conditionalLayer插件地图变量未定义

问题描述

我正在将一个项目移动到 webpack,将代码拆分为模块,但是在某些地方我遇到了插件或其他一些代码期望map是一个可见的全局变量的情况。抛出以下异常,因为 map 没有暴露给它:

onRemove: function() {
  this._removeMarkers();
  this.onMap = false;
  map.off("moveend", this._update);
},

Uncaught ReferenceError: map is not defined
    at NewClass.onRemove (leaflet.conditionalLayer.js:77)
    at NewClass.removeLayer (Layer.js:185)
    at NewClass._onInputClick (Control.Layers.js:378)
    at HTMLInputElement.handler (DomEvent.js:79)

目前,我在与页面一起加载的捆绑文件(在我的情况下为 map.js)中创建 map 变量,并将其导入到其他模块中,像这样

import { map } from './map.js';

所有传单代码和传单插件都作为脚本导入,没有 webpack。如何在所有脚本之间共享地图实例,就像在没有模块的情况下创建它一样?

现在我解决了这个问题并在模块中将map声明为window.map并且它可以工作,但似乎有更方便的导入方式而不是使用窗口对象。

标签: javascriptwebpackleaflet

解决方案


看起来像传单条件层插件中的错误。

它的onRemove方法应该:

    onRemove: function(map) {
        // (do something)
    }

好消息是 Leaflet 类系统应该使您能够轻松地修补该插件,而无需等待插件作者修复此错误:

L.ConditionalMarkers.include({
  onRemove: function (map) {
    this._removeMarkers();
    this.onMap = false;
    map.off("moveend", this._update);
  }
});

推荐阅读