首页 / 浏览问题 / 其他 / 问题详情
marker事件匿名方法循环闭包的问题
22EXP 2017年05月19日
for(var i = 0; i<len; i++){
                    var jhBjdArr = new Array();
                    jhBjdArr = cxjgInfoArr[i].split(",");
                    
                    var jdxzmc = jhBjdArr[1];
                    jd = jhBjdArr[2];
                    wd = jhBjdArr[3];
                    var nsrsl = jhBjdArr[4];
                    
                    var size = new SuperMap.Size(30,25);
                    var offset =  new SuperMap.Pixel(8, -30);
                    var jhIcon = new SuperMap.Icon(Constants.contextRoot+"/map/superMap/theme/images/marker.png", size,offset);
                    var point = new SuperMap.LonLat(jd, wd);
                    var marker = new SuperMap.Marker(point,jhIcon);
                    
                    
                    marker.events.on({
                        "mousemove":function(){addJhMarkerInfo(marker,nsrsl,jdxzmc,point)}
                    });
                    marker.events.on({
                        "mouseout":removePopup
                    });
                    
                    markerlayer.addMarker(marker);
                }

想这个样子的代码,marker.events.on({"mousemove":function(){addJhMarkerInfo(marker,nsrsl,jdxzmc,point)}});这段代码怎么能一个标记点对应一个,而不是一个所有标记点对应最后一个,或者一次性像marker.events.on({"mousemove":(function(){addJhMarkerInfo(marker,nsrsl,jdxzmc,point)})()});这么写,加载就全执行了,事件根本没用

2 个回答

问题集中在http://ask.supermap.com/7825中为您解答。

1,695EXP 2017年05月19日
你好,在你的代码中没有看到有闭包啊,只有匿名函数。但是匿名函数在执行上和普通的方法没有区别。

建议您可以看看范例程序中的范围查询,将所有查询到的结果用marker展示并且可以点击marker弹出信息框。

另外,还有一个推荐的方法,就是使用vector图层来渲染图片,然后使用selectFeature来绑定点击事件。这样操作比较简单并且vectorLayer的性能要比markrLayer高。
5EXP 2017年05月19日
我不会闭包,所以我想问的是怎么闭包
...