我希望能够通过javascript循环实例var,但我不太确定如何使其工作。
javascript:
-@spots.each do |spot|
map.addMarker({
lat: "#{spot.latitude}",
lng: "#{spot.longitude}",
title: "spot",
});
});
我尝试了什么: 使用<%@ spots.each do | spot | %GT;并且没有#{}
的引号答案 0 :(得分:8)
似乎一旦你进入javascript:
苗条区,你就不能再进行红宝石循环了。
我能够让这个主要用于工作
- @spots.each do |spot|
javascript:
map.addMarker({
lat: #{spot.latitude},
lng: #{spot.longitude},
title: "spot"
});
但是这为每个addMarker
调用创建了单独的脚本标记,这看起来相当愚蠢。
您还可以尝试将数据作为JSON放在页面上,然后在Javascript中执行循环。像这样:
javascript:
var spots = #{raw @spots.to_json};
var ii = 0;
var nspots = spots.length;
for(;ii<nspots;++ii) {
theMap.addMarker(spots[ii]);
}
你想确保在这个东西运行时theMap
可用,但我认为这可能会有所帮助。您还应该检查每个@spot的JSON格式。根据您如何设置JSON,每个点可能看起来像
{'spot': { 'latitude': ###, 'longitude': ### } }
这意味着您必须取消引用 循环中的对象。
答案 1 :(得分:2)
容易修复但效率不高。
-@spots.each do |spot|
javascript:
map.addMarker({
lat: "#{spot.latitude}",
lng: "#{spot.longitude}",
title: "spot",
});
2。 在js中循环而不是视图上下文
javascript:
var spots = #{@spots.to_json};
$(spots).each(function(index, obj) {
map.addMarker({
lat: obj.latitude,
lng: obj.longitude,
title: "spot",
});
});