2012-02-09 39 views
4

我遇到了動態Ovi /諾基亞地圖的問題,我希望每30秒重新加載一次標記 - 從XML讀取標記並獲取動態內容。除泡沫外,一切正常。它僅在加載時顯示,然後第一個刷新標記不再可點擊(點擊時更改爲放大)。我想更新的標記,以表明在泡過最新的HTML內容:諾基亞/ Ovi地圖問題 - 動態刷新標記

<script> 
var markerCoords; 
var mapContainer; 
var container; 
var myMap; 
var bubbles=new Array(); 

// When the HTML page body section is loaded this function will be called. 
// This function gets passed the marker XML data file name 
var updateTime=30; 
var updateTime=1000*updateTime; 
var markerUpdate=self.setInterval("placeMarkersOnMaps('geomarkers.xml')",updateTime); 
function placeMarkersOnMaps(filename) 
{ 
var counter = 0; 
$.ajax({ 
    type: "GET", 
    url: filename , 
    dataType: "xml", 
    success: parseXml, 
       error : err 
    }); 

} 
function err(){ 
     alert("An Error has occurred."); 
} 

// Here we create an Nokia Maps within a Container. 

mapContainer = document.getElementById("mapContainer"); 


myMap = nokia.maps.map,  
       map = new myMap.Display(mapContainer, { 
        center: [52.59, 13.3], zoomLevel: 2, 
        components: [ new myMap.component.Behavior(), 
            new nokia.maps.map.component.ZoomBar(), 
            new nokia.maps.map.component.Overview(),        
            new nokia.maps.map.component.TypeSelector(),  
            new nokia.maps.map.component.ScaleBar() 
        ] 
       }); 



    placeMarkersOnMaps('geomarkers.xml'); 






     function deleteMarker(coords) { 
      var marker; 
      for (i=0; i< map.objects.getLength(); i++) { 
       if (map.objects.get(i) instanceof nokia.maps.map.StandardMarker) { 
        if (coords.latitude == map.objects.get(i)..coords.latitude 
        && coords.longitude == map.objects.get(i)..coords.longitude){ 
         marker = map.objects.get(i); 
         marker.removeListener("click", function(evt) { infoBubbles.addBubble(evt.target.$html, evt.target.coordinate);}, false);; 
         map.objects.remove (marker); 
         break; 
        } 
       } 
      } 
      return marker; 
     } 
function parseXml(xml) 
{ 
    var infoBubbles = new nokia.maps.map.component.InfoBubbles(); 
    map.addComponent(infoBubbles); 
    var container = new nokia.maps.map.Container(); 
    $(xml).find("marker").each(function(){ 

      //Read the name, address, latitude and longitude for each Marker 
      var nme = $(this).find('name').text(); 
      var address = $(this).find('address').text(); 
      var lat = $(this).find('lat').text(); 
      var lng = $(this).find('lng').text(); 
      var zhtml = $(this).find('zhtml').text(); 
      var zcolor = $(this).find('zcolor').text(); 

      //Put each marker on the map as the data has been read. 

      var markerCoords = new nokia.maps.geo.Coordinate(parseFloat(lat), parseFloat(lng));  

      var marker = new nokia.maps.map.StandardMarker(markerCoords, {text:nme, brush:{color:zcolor}, $html:zhtml}); 
      marker.addListener('click' , function(evt) { infoBubbles.addBubble(evt.target.$html, evt.target.coordinate);}, false); 
      container.objects.add(marker);  

     }); 
     // Add the marker container . 
     map.objects.add(container); 
     // Zoom into the markers. 



} 


</script> 

回答

2

它看起來像intialising的infobubble線是在錯誤的地方:

var infoBubbles = new nokia.maps.map.component.InfoBubbles(); 
    map.addComponent(infoBubbles); 

應該放在前行

placeMarkersOnMaps('geomarkers.xml'); 

否則,您每次運行placeMarkersOnMaps()時都試圖添加一個信息氣泡組件。通常只有一個。

而且你deleteMarkers功能可以通過

myMap.objects.clear(); 
被替換