Javascript 具有特定infotemplate内容的多个标记

Javascript 具有特定infotemplate内容的多个标记,javascript,esri,arcgis-js-api,Javascript,Esri,Arcgis Js Api,当我循环浏览地址列表时,我能够很好地绘制所有地址的标记。但是,当我单击任何标记时,infowindow内容只显示最后一个标记的数据。我如何解决这个问题 沙文 var-map={}; map.markers=[]; map.addresses=[ { “行”:“2101K街”, “参考号”:“160621-000005” }, { “行”:“2131 K街”, “参考号”:“170708-000015” }, { “行”:“2321 K街”, “参考号”:“170707-000028” } ];

当我循环浏览地址列表时,我能够很好地绘制所有地址的标记。但是,当我单击任何标记时,infowindow内容只显示最后一个标记的数据。我如何解决这个问题

沙文
var-map={};
map.markers=[];
map.addresses=[
{
“行”:“2101K街”,
“参考号”:“160621-000005”
},
{
“行”:“2131 K街”,
“参考号”:“170708-000015”
},
{
“行”:“2321 K街”,
“参考号”:“170707-000028”
}
];
.
.
.
map.map\u object=新映射(“esri\u映射”{
底图:“地形”,
中心:[,],,
缩放:12
});
变量定位器=新定位器(“http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
对于(var i=0;i”;

var infoTemplate=new esri.infoTemplate(addr.ref_no,html);//您可以将
for
循环的内部封装在一个自调用函数中,该函数将提供闭包。类似于以下内容:

for(var i = 0; i < map.addresses.length; i++) 
    (function (i) {
        var addr = map.addresses[i];
        var params = {
            countryCode: "US",
            maxLocations: 1,
            address: {"SingleLine": addr.line}
        };
        locator.addressToLocations(params, function(candidates){
            locatorDone(candidates, addr);
        });
    })(i)
for(变量i=0;i

这将使
i
成为此代码块的本地。由于它现在位于您的代码中,所有
addr
都引用了最后一个地址,因为当您异步调用
locatorDone
时,
for
循环已完成运行。或者,您可以使用
let
类似于:
for(设i=0;…
如果您不需要此代码在11版以下的Internet Explorer上运行。

我已经更新了我的答案。它现在应该可以工作了。您能为我们提供一个小提琴和一些虚拟数据来复制此结果吗?不会
addresses.forEach(函数(地址){})
也可以,因为它通过函数调用创建了一个新的作用域,可读性更好。似乎不起作用。在5个地址中,如果我遵循此方法,信息窗口将显示第4个地址的数据。@Marco它将在更新的浏览器上工作。根据它将只在IE 11中工作。根据它将在IE9上工作。如果我E8不是一个目标,那么可以使用
forEach
。你可以使用polyfill或shim库来解释这一点。但是在任何情况下,自动执行函数也应该可以工作,我只是担心可读性。@asprin这很奇怪。但是如果没有实际的代码,真的很难猜测发生了什么。你能做一个解释吗什么是桥?
for(var i = 0; i < map.addresses.length; i++) 
    (function (i) {
        var addr = map.addresses[i];
        var params = {
            countryCode: "US",
            maxLocations: 1,
            address: {"SingleLine": addr.line}
        };
        locator.addressToLocations(params, function(candidates){
            locatorDone(candidates, addr);
        });
    })(i)