SuperMap iClient 9D for Leaflet 中的客户端分段专题图层rangethemelayer,添加到地图上,删除图层(map.removeLayer(themeLayer))的时候,会报这样的错误
Uncaught RangeError: Maximum call stack size exceeded
at Object.stamp (VM97 leaflet.js:5)
at e.removeLayer (VM97 leaflet.js:6)
at e.onRemove (VM98 iclient9-leaflet.min.js:9)
at e.removeLayer (VM97 leaflet.js:6)
at e.onRemove (VM98 iclient9-leaflet.min.js:9)
at e.removeLayer (VM97 leaflet.js:6)
at e.onRemove (VM98 iclient9-leaflet.min.js:9)
at e.removeLayer (VM97 leaflet.js:6)
at e.onRemove (VM98 iclient9-leaflet.min.js:9)
at e.removeLayer (VM97 leaflet.js:6)
问题补充:
我看源代码了,在leaflet的removelayer中会调用该layer的onRemove方法,而在rangeThemeLayer的onRemove方法(继承自themeLayer)中,会再次调用map.removeLayer,造成递归无限调用,导致堆栈溢出。
这个问题在9d的iclient for leaflet样例>客户端专题图>分段专题图中可以复现
http://localhost:8090/iserver/iClient/forJavaScript/examples/leaflet/editor.html#rangeThemeLayer
在122行下添加如下代码
setTimeout(function(){
map.removeLayer(themeLayer)
},5000)
然后运行,在专题图出现5s后,就会报如上错误