2017-04-11 1 views
-1

Ich habe die folgende Liste namens 'locationList':Mit Freemarker 'Liste' Richtlinie innerhalb von Google Maps funktioniert

[[lat: -6,2986514, lng: 53,3324511, car_reg: 161-D-XXXXXX], [ lat: -7,259881, lng: 53,041335, car_reg: 151-D-YYYYY], [lat: -7,6273397, lng: 53,3052366, car_reg: 142-D-ZZZZZ]]

Nun, wenn ich nur eine einfache Iteration so funktioniert es. (Es gibt meine drei Koordinatenlinien aus.).

<#list locationList as loc> 
     <p> Output: ${loc.lat} -- ${loc.lng} </p> 
    </#list> 

Aber wenn ich versuche, es in meiner Google Maps-Funktion zu verwenden, wird es nicht funktionieren. Das ist, was ich habe:

function geocodeLatLng(geocoder, map, infowindow) { 

<#list locationList as loc> 

    var latlng = {lat: ${loc.lat}, lng: ${loc.lng} }; 

    var marker = new google.maps.Marker({ 
      position: latlng, 
      map: map 
      }); 

    </#list> 
} 

Es funktioniert gut, wenn ich manuell dreimal nur schreiben, was innerhalb der Freemarker Listen-Tags enthalten ist.

Und ich habe alles versucht, was mir einfällt. Kann jemand helfen, Licht zu machen, was hier passiert?

EDIT - ganze Skript unten enthalten:

<script> 


function initMap() { 

    <#assign lat='53.328015' lng='-6.3743767' > 

    var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 8, 
     center: {lat: ${lat}, lng: ${lng} } 
    }); 
    var geocoder = new google.maps.Geocoder; 
    var infowindow = new google.maps.InfoWindow; 


    google.maps.event.addDomListener(window, 'load', function() { 
     geocodeLatLng(geocoder, map, infowindow); 
    }); 
    } 


function geocodeLatLng(geocoder, map, infowindow) { 

    <#list locationList as loc> 

    var latlng = {lat: ${loc.lat}, lng: ${loc.lng} }; 

    var marker = new google.maps.Marker({ 
      position: latlng, 
      map: map 
      }); 

    </#list> 
} 

</script> 

<script src="https://maps.googleapis.com/maps/api/js?key=REMOVED&callback=initMap" 
    async defer></script> 

Antwort

1

In Fällen wie diesem, immer überprüfen, was die tatsächliche Leistung ist (Sie sollten, dass im Web-Browser tun können) und wie unterscheidet sich von dem, was Sie schreibe, wenn du es manuell füllst. Überprüfen Sie auch, welche JavaScript-Fehler Sie erhalten.

Meine blinde Vermutung ist, dass die Zahlen für die menschliche Zielgruppe formatiert sind, und daher keine gültigen JavaScript-Literale sind. Verwenden Sie ?c (wie in ${loc.lat?c}) für Computer "Publikum" zu formatieren.

+0

Ich bin an die serverseitige Programmierung gewöhnt. Allerdings habe ich die Konsole in Chrom verwendet, um die Ausgabe zu verfolgen. Es werden keine Fehler gemeldet. Ich habe auch Ihren Vorschlag von? C. Funktioniert nicht. Aber ich habe bereits versucht, eine <# assign-Anweisung zu verwenden, um Werte anzugeben und sie so einzufügen, wie ich es hier getan habe, und das hat gut funktioniert. Also muss es etwas mit der Schleife zu tun haben? Ich fragte mich über Async und verzögern, aber Änderungen, die nicht geholfen haben. Ich bearbeite meinen Beitrag, um das gesamte Skript einzuschließen (obwohl ich das Infowindow-Zeug für die Rechnung herausgezogen habe. Irgendwelche Hilfe mercefiedfd. –

+0

Überprüfen Sie das generierte JavaScript (bedeutet, dass alle FreeMarker-Anweisungen darin bereits aufgelöst wurden) gemeint mit "check was der eigentliche Output ist". – ddekany

0

Der Code war in Ordnung. Beim Aufbau meiner Liste hatte ich Längen- und Breitengrad falsch herum. Entschuldigung. Ich habe an dem völlig falschen Ort gesucht.

Verwandte Themen