,,最新项目在使用传单做地图,需要增加标注,意外发现,传单竟然没有良好标签的功能,还好,传单的插件中有不少扩展。
,,最后选择”的传单。LabelTextCollision”,演示采用的是传单版本“1.0.1 + ffcfcc1"。当我把传单换成1.2.0以后,
var p =, L.polyline ( (,(139.749213,35.695786,,), (139.748213,35.696786,,), (139.747213,35.695786,,),,,{ weight : 12, 时间:color & # 39; # fe57a1& # 39; text : & # 39; Leaflet.LabelTextCollision ! ! ! ! ! ! ! ! & # 39; }).addTo(地图); var layers =, L.featureGroup () .addTo(地图); for (, var index 拷贝数据),{ var d =,数据(指标); var latlng =, L.latLng d (d [0], [1]); var c =, L.circleMarker (latlng, { radius : 0, 时间:text latlng.toString () }); layers.addLayer (c); if (index ==, 3000), { 打破; } }
其中"}).addTo(地图);”和“layers.addLayer (c);“都会报错,其中一个报错截图如下
定位问题到指定位置
后来,我从传单的各个版本源码页找到了1.01和1.2.0的源码,经比较,发现1.0.1画布中。js的写法
L.Canvas =, L.Renderer.extend ({ ,,,onAdd:, function (), { ,,,,,,,L.Renderer.prototype.onAdd.call(这个); ,,,,,,,this._layers =, this._layers | |, {}; ,,,,,,,//,Redraw vectors since canvas is cleared upon 去除, ,,,,,,,//,拷贝case of removing 从而renderer itself 得到,地图。 ,,,,,,,this._draw (); ,,,},
在1.2.0中的,canvas.js 改为
export var Canvas =, Renderer.extend ({ ,,,getEvents:, function (), { ,,,,,,,var events =, Renderer.prototype.getEvents.call(这个); ,,,,,,,events.viewprereset =, this._onViewPreReset; ,,,,,,,return 活动; ,,,}, ,,,_onViewPreReset:, function (), { ,,,,,,,//,Set a flag so that a viewprereset + moveend + viewreset only updates& redraws 一旦 ,,,,,,,this._postponeUpdatePaths =,真的; ,,,}, ,,,onAdd:, function (), { ,,,,,,,Renderer.prototype.onAdd.call(这个); ,,,,,,,//,Redraw vectors since canvas is cleared upon 去除, ,,,,,,,//,拷贝case of removing 从而renderer itself 得到,地图。 ,,,,,,,this._draw (); ,,,},
以及渲染器。js的
export var Renderer =, Layer.extend ({ ,,,//@section ,,,//,@aka Renderer 选项 ,,,选择:,{ ,,,,,,,//,@option 填充:Number 0.1=, ,,,,,,,//,请,much 用extend 从而clip area around 从而map view (relative 用its 大小) ,,,,,,,//,如只0.1,would be 10%, of map view 拷贝each 方向 ,,,,,,,填充:0.1 ,,,}, ,,,初始化:,function (选项),{ ,,,,,,,Util.setOptions(,,选项); ,,,,,,,Util.stamp(这个); ,,,,,,,this._layers =, this._layers | |, {}; ,,,},
所以问题就显而易见,是在代码重构的时候,将这个。_layers初始化提升到了父类初始化中,然而,Javascript的编码并不能保证初始化函数一定被调用,就比如我这次遇到的,
var layers =, L.featureGroup () .addTo(地图);
<强> 强>
在1.2.0的leaflet-src。null