2012-02-09 57 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(); 
被替换