在 google 映射函数中使用 freemarker 'list' 指令
Using freemarker 'list' directive within a google maps function
我有以下名为 'locationList' 的列表:
[[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]]
现在,如果我像这样进行简单的迭代就可以了。 (它输出我的三行坐标。)。
<#list locationList as loc>
<p> Output: ${loc.lat} -- ${loc.lng} </p>
</#list>
但是当我尝试在 google 地图功能中使用它时,它不起作用。这是我的:
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>
}
如果我只是手动写出 freemarker 列表标签中包含的内容的三倍,它就可以正常工作。
而且我已经尝试了所有我能想到的。谁能帮助阐明这里发生的事情?
编辑 - 整个脚本如下:
<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>
在这种情况下,请始终检查实际输出是什么(您应该能够在网络浏览器中执行此操作)以及它与您手动填写时所写的内容有何不同。另外,检查你收到的 JavaScript 错误。
我的盲目猜测是这些数字是为人类观众格式化的,因此不是有效的 JavaScript 文字。使用 ?c
(如 ${loc.lat?c}
)为计算机格式化 "audience"。
代码很好。在构建列表时,我弄错了经度和纬度。道歉。我找错地方了。
我有以下名为 'locationList' 的列表:
[[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]]
现在,如果我像这样进行简单的迭代就可以了。 (它输出我的三行坐标。)。
<#list locationList as loc>
<p> Output: ${loc.lat} -- ${loc.lng} </p>
</#list>
但是当我尝试在 google 地图功能中使用它时,它不起作用。这是我的:
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>
}
如果我只是手动写出 freemarker 列表标签中包含的内容的三倍,它就可以正常工作。
而且我已经尝试了所有我能想到的。谁能帮助阐明这里发生的事情?
编辑 - 整个脚本如下:
<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>
在这种情况下,请始终检查实际输出是什么(您应该能够在网络浏览器中执行此操作)以及它与您手动填写时所写的内容有何不同。另外,检查你收到的 JavaScript 错误。
我的盲目猜测是这些数字是为人类观众格式化的,因此不是有效的 JavaScript 文字。使用 ?c
(如 ${loc.lat?c}
)为计算机格式化 "audience"。
代码很好。在构建列表时,我弄错了经度和纬度。道歉。我找错地方了。