0

我在 LeafletJs 地图中的 for 循环有问题,由于某种原因,我无法从数组中给我正确的 ID,而是给我所有 clickevent 的最后一个 ID。在 Id之外$.get()显示正确。但在里面我只是得到数组中的最后一个。是否可以扩展获得自定义矿石的选项是否有其他方法可以做到这一点。

for (var i = 0; i < myColumnDefs.length; i++) {
      var obj = myColumnDefs[i];
     // obj.id = i;
      var latitude = obj.GisLatitude.toFixed(5);
      var longitude = obj.GisLongitude.toFixed(5);

    //The correct id
      console.log(obj.Id);

      var m = L.marker([latitude, longitude], { icon: greenIcon }).on('click', function (e) {
        var markeren = this;
        debugger;

        $.get(ol.url('~/Map/MapContent/'), {id: m.id }, function(data) {
          L.popup()
        .setLatLng(markeren.getLatLng())
        .setContent(data)
        .openOn(map);
        });
      }).addTo(map);
      m.id = obj.Id;
      console.log('Latitude: '+latitude + ' - Longitude: ' + longitude);
    }
4

1 回答 1

1

在 $.get 的成功/错误处理程序中,上下文绑定是 event.target ,并且您正在迭代的循环在调用事件处理程序之前很久就完成了。因此,您将获得点击处理程序的最后一个 ID。

var markeren = this;在控制台上记录这个@ 。上下文是您需要的。再次登录markeren$.get ,它不会是你所期望的!

适当地绑定函数上下文,你的问题就会消失。

于 2013-03-11T09:51:46.570 回答