2013-10-11 2 views
0

각 마커에 팝업을 첨부하려고합니다 (이 경우 OpenLayers 및 OpenStreetMaps를 사용하고 있습니다). 각 마커는 해당 팝업을 보여주는 '클릭'이벤트에 등록됩니다.events.register는 등록중인 이벤트를 자동 실행합니다.

그러나 마커 클릭을 기다리는 대신 시작시 모든 팝업을 실행하기 만하면됩니다.

약 1000 개 마커가 있습니다 내가 (만들 때 숨겨져) 마커와 팝업 채우는이 루프를 사용하고 있으므로 :

for (var i = 0; i < data.length; i++) 
       { 

        if (i == 1) { 

         var lonLat = new OpenLayers.LonLat(data[i].Lon, data[i].Lat).transform(fromProjection, toProjection); 
         var zoom = 5; 
         map.setCenter(lonLat, zoom); 
        } 

        var lonLat = new OpenLayers.LonLat(data[i].Lon, data[i].Lat).transform(fromProjection, toProjection); 
        AddingPopup(lonLat); 
        AddingMarker(i, lonLat); 

그리고이 두 만드는 내 기능은 다음과 같습니다

function AddingMarker(i, lonLat) { 

    var marker = new OpenLayers.Marker(lonLat); 

    markers.addMarker(marker); 
    marker.events.register('click', marker, PopupsShow(i)); 
}; 

function AddingPopup(lonLat) { 

    var popup = new OpenLayers.Popup("Popup", lonLat, null, "text", true); 

    map.addPopup(popup); 
    popup.hide(); 
}; 

그리고 이것은 자동 발사 실행시 모든 마커되고있는 기능입니다 :

function PopupsShow(i) { 

    map.popups[i].show(); 
}; 

여기에 내가 누락되었습니다. 실행시 PopupsShow 기능이 시작되는 이유는 마커가 클릭되기를 기다리지 않고 있기 때문입니다. 주변을 둘러 보았지만 아무 도움도되지 않는 것 같습니다.

감사합니다.

답변

1

나는 그것을 알아 낸 : marker.events.register("click", marker, PopupsShow)

그리고 우리가 i을 필요로하기 때문에 우리가 같이 호출 할 수 있습니다

우리는 marker.events.register("click", marker, PopupsShow(i))

는 대신에 우리는 다음과 같이 호출 할 필요가 사용하여 이벤트를 등록 할 수 없습니다 이 :

marker.events.register("click", marker, function() { 
     map.popups[i].show(); 
    }); 
1

이벤트 핸들러는 실제로 관례적인 wa 인 인수 (이벤트)를 얻을 수 있습니다. 이것을 수행합니다. 또한 각 마커 대신 레이어에 처리기를 바인딩하는 것이 가장 좋습니다.

markerLayer.events.register('click', marker, 
     function(event) { 
      var feature = event.feature; 
      /* make popup appear */ 
    }); 

팝업을하는 방법은 사용자의 요구를 충족하기 위해 다양하지만, 일반적으로 팝업은 수요 여기보다는 미리 만들기 및 호출 쇼에 생성됩니다.

관련 문제