javascript - 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并且它可以工作,但似乎有更方便的导入方式而不是使用窗口对象。
解决方案
看起来像传单条件层插件中的错误。
它的onRemove
方法应该:
- 接受一个
map
参数,如扩展控件的传单教程中所示:
onRemove: function(map) {
// (do something)
}
- 或按照(您的?)问题https://github.com/Eclipse1979/leaflet-conditionalLayer/issues/6
this._map
中的建议使用(而不是)map
好消息是 Leaflet 类系统应该使您能够轻松地修补该插件,而无需等待插件作者修复此错误:
L.ConditionalMarkers.include({
onRemove: function (map) {
this._removeMarkers();
this.onMap = false;
map.off("moveend", this._update);
}
});
推荐阅读
- maven - 将 Maven 项目导入 IntelliJ 2019.3 后,捆绑的类不在类路径上
- ruby-on-rails - 如何将元数据添加到 csv 文件?
- java - java中的组合和聚合有什么区别?
- php - 如何在php中获得超过24小时的时间间隔
- vba - 是否有“Application.Wait”方法
- linux - 为什么内核代码中有多个位置的同一个文件?
- salesforce - 如何使用 jitterbit 从 Salesforce 查询大数据
- c# - C# Entity Framework,删除子项然后删除父项,DELETE 语句与 REFERENCE 约束冲突
- r - 如何在同一数据中拟合两个线性回归?
- javascript - 如何使用 React Redux 将道具传递给子组件?