首页 / 浏览问题 / 云GIS / 问题详情
9d rangethemelayer 报错
2EXP 2018年01月08日

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后,就会报如上错误

1个回答

您好,这个是堆栈溢出,你换个浏览器试一下。
4,524EXP 2018年01月08日

我看源代码了,在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后,就会报如下错误。

我觉得这是一个bug,你们能确认下吗?

您好,我这刚刚测试了一下,9.0.0版本确实会出现这个问题,您iclient客户端升级成9.0.1版本吧,这个问题已在9.0.1版本解决
...