我正在尝试构建一个带有一些测试坐标的数组,以便与OpenLayers Overlays一起使用。
这是代码:
select * from `items` where `title` like ? and `published` = ? and (`alias` like ? or `description` like ?) or exists (select * from `categories` where `items`.`category_id` = `categories`.`id` and `title` like ?) or exists (select * from `countries` where `items`.`country_id` = `countries`.`id` and `name` like ?) limit 5 offset 0
重要提示:在我的app.js文件中,coords被定义为一个对象数组(我在mongodb中找到({}))。
我真的被困在这里请帮忙! 谢谢! :DDD
答案 0 :(得分:0)
您的变量i
存在于客户端JS中,而不是存在于服务器端JS中。
有各种方法可以解决这个问题,其中一种方法是:
var parada = <%- JSON.stringify(coords.map(function(pair) {
return [pair.lon, pair.lat];
})) %>;
我假设lon
和lat
总是数字,这样就不存在注射攻击的风险。
或者,您可以在调用模板之前进行转换,将复杂性保留在模板本身之外。
顺便说一下,你在lenght
中也有拼写错误。
答案 1 :(得分: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的帮助,你让我了解了这个问题;)