0

LeafletJsマップのforループに問題があります。何らかの理由で、配列から正しいIDを取得できず、代わりにすべてのクリックイベントの最後の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 に答える