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);

这适用于单个标记,但是当我遍历此代码以获取多个标记时,出现问题 - 我没有为所有标记获得所需的颜色。

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 回答