9d rangethemelayer 报错

0 喜欢 0 不喜欢
42 浏览

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月 8 分类:云GIS | 用户: shawumu 初出茅庐 (25 分)
修改于 1月 8 用户:shawumu

1个回答

1 喜欢 0 不喜欢
 
已采纳
您好,这个是堆栈溢出,你换个浏览器试一下。
最新回答 1月 8 用户: 李熙y 名扬四海 (1,907 分)
采纳于 1月 8 用户:shawumu

我看源代码了,在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版本解决
...