2

やりたいことは、マーカーのアイコンを動的にリセットすることだけです。たとえば、地図上の特定の場所に赤いマーカーが固定されているとします。赤いマーカーを黄色にする必要があるユーザー操作が発生します。この場合、次のようなことができると期待しています。

      var icon = marker.serviceObject.getIcon();
      if ($("#chooseJobsForWorkSite ul li input:checked").size() > 0) {
        icon.url = "/assets/purple_MarkerT.png";
      } else {
        icon.url = "/assets/green_MarkerS.png";
      }
      marker.serviceObject.setIcon(icon);

これは 1 つのマーカーに対しては正常に機能しますが、複数のマーカーに対してこのコードをループすると、何か問題が発生します。すべてのマーカーで目的の色が得られません。

4

1 に答える 1

1

replaceMarkers API メソッドを使用して、この問題を解決しました。機能したコードは次のとおりです。

var replacementMarkers = new Array();
for (var k = 0; k < activeMarkers.length; ++k) {
  var marker = activeMarkers[k];

  var iconUrl = null;
  if ($.inArray(marker, taskMarkers) >= 0) {
    iconUrl = "/assets/purple_MarkerT.png";
  } else {
    iconUrl = "/assets/green_MarkerS.png";
  }

  replacementMarkers.push({
    "lat": marker.lat.toString(),
    "lng": marker.lng.toString(),
    "picture": iconUrl,
    "id": marker.id,
    "description": marker.description
  });
}

// Delay the replacement operation because in some instances, we reach this branch via the Gmaps.map.callback.
// In that case, I prefer to defer touching the gmap4rails until the current branch is done.

window.setTimeout(function() {
  Gmaps.map.replaceMarkers(replacementMarkers);
  resetAddressMarkers();
}, 25);
于 2012-07-22T19:18:40.940 に答える