2017-10-19 131 views
1

我想用OpenLayers叠加层与一些测试坐标一起构建一个数组。不能在html scripttag中将EJS变量推入数组中?

这是代码:

var parada = []; 

for(var i = 0; i < <%- coords.length%>; i++){ //First loop to fill the array 

    var arr = [<%- coords[i].lon %>, <%- coords[i].lat %>]; //THIS IS THE ERROR LINE! ... says the console... 
    parada.push(arr); 

} 

var overlays = []; 

for (i = 0; i < parada.lenght; i++) { //Second loop to build the overlays 
    overlays.push(new ol.Overlay({ 
     position: ol.proj.fromLonLat([parada[i][0], parada[i][1]]), //With the data of the array above 
     positioning: 'center-center', 
     element: document.getElementById('parada' + i), 
     stopEvent: false 
    })); 

} 

for (i = 0; i<overlays.length; i++){ // Last loop to assign the overlays. 
    map.addOverlay(overlays[i]); 
} 

重要:在我的app.js文件,坐标为,定义为对象的数组(即我发现({})中的mongodb)。

我真的被困在这里请帮忙! 谢谢! :DDD

回答

0

您的变量i存在于客户端JS中,而不存在于服务器端JS中。

有很多方法,你可以解决这个问题,其中之一是各种:

var parada = <%- JSON.stringify(coords.map(function(pair) { 
    return [pair.lon, pair.lat]; 
})) %>; 

我假设lonlat总是会是数字,如不存在风险的注入攻击。

或者,您可以在调用模板之前先进行转换,将复杂性保留在模板本身之外。

顺便提一下,您在lenght中也有一个错字。

+0

谢谢!它似乎工作:) 我把你的代码放在你说的app.js文件中。 还有一件事:如何在EJS中调用变量? <%= %>? <%= parada [0]%>或<%= parada [0] .lon%>都似乎不起作用... 非常感谢您的帮助!你太棒了:D –

+0

@AlanSchwarz变量'parada'只存在于客户端JS中,而不存在于服务器端JS中。 “<% %>”中的代码与外部代码完全分开,这只是一个巧合,它们都使用JavaScript。从EJS的角度来看,只有“<% %>”内的代码被解释为代码,外部的位仅仅是任意文本。然后将模板生成的文本发送到浏览器(您可以在开发工具中看到它),然后浏览器运行生成的代码。这两个是完全独立的过程。 – skirtle

0

进行了更改,以便在客户端处理数据会更容易。

var lon = []; 
    var lat = []; 
    for (var i = 0; i < <%=lon.length%>; i++) {<%for(var x = 0; x < lon.length ;x++) { %> 
     lon.push(<%= lon[x] %>); 
     lat.push(<%= lat[x] %>); 
    <% } %>} 

这样我在客户端建立一个EJS数组。

//Create the Overlays Array 
    var overlays = []; 

    for (var i = 0; i < <%=lon.length%>; i++) { 
     overlays.push(new ol.Overlay({ 
      position: ol.proj.fromLonLat([lon[i], lat[i] ]), 
      positioning: 'center-center', 
      element: document.getElementById('parada' + i), 
      stopEvent: false 
     })); 
    } 

然后,我可以简单地在任何需要的地方使用这个数组。

感谢@skirtle的帮助,你给我了解这个问题;)