我正在使用Decarta JS API PIN事件处理程序
我正在地图上显示引脚,并且每个引脚的click事件都会正确触发。当我尝试将pin id传递给处理程序时,会出现问题。无论点击哪个引脚,它始终显示最后加载的ID。我声明监听器的代码是:
for (var idx = 0; idx < jsonObjects.devices.length; idx++) {
var device = jsonObjects.devices[idx]
deCarta.Core.EventManager.listen('click', function() {home.pinPushed(device.id);}, device.pin);
}
这是在我正在显示的所有位置的循环中完成的。它们在各自的坐标处正确显示,并且记录前一行清楚地显示每个引脚都使用正确的id进行声明。但是,每当我点击一个引脚时,声明的 LAST id 是唯一传递给处理程序的id:
home.pinPushed(device.id)
如何在单击引脚时让每个引脚传递唯一ID?
答案 0 :(得分:1)
试试这个:
deCarta.Core.EventManager.listen('click',
(function(id) { return function (){home.pinPushed(id);}})(device.id), device.pin);
美化版:
deCarta.Core.EventManager.listen('click', (function (id)
{
return function ()
{
home.pinPushed(id); //<---- id here is the closured variable
}
})(device.id), device.pin);
说明:
Js
有一个函数范围(不是大括号({})
范围。)
您的for
循环不创建 ANY 范围/功能。
我正在做的是为每次迭代创建执行上下文。
对于每次迭代,我将当前device.id
发送给一个函数,该函数又返回另一个函数,该函数关闭了该变量。