似乎一旦你进入了javascript:
slim 块,你就不能再做 ruby 循环了。
我能够让它大部分工作
- @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': ### } }
这意味着您必须取消引用循环中的对象。