Ruby on rails Ruby在slim lang中的每个循环

Ruby on rails Ruby在slim lang中的每个循环,ruby-on-rails,ruby,slim-lang,Ruby On Rails,Ruby,Slim Lang,我希望能够通过javascript循环一个实例变量,但我不太确定如何让它工作 javascript: -@spots.each do |spot| map.addMarker({ lat: "#{spot.latitude}", lng: "#{spot.longitude}", title: "spot", }); }); 我尝试的是: 使用和不使用#{}的引号很容易修复,但如果斑点太长则效率低下 -@spots

我希望能够通过javascript循环一个实例变量,但我不太确定如何让它工作

javascript:
  -@spots.each do |spot|
      map.addMarker({
        lat: "#{spot.latitude}",
        lng: "#{spot.longitude}",
        title: "spot",
      });
  });
我尝试的是:
使用和不使用#{}

的引号很容易修复,但如果斑点太长则效率低下

-@spots.each do |spot|
  javascript:
    map.addMarker({
      lat: "#{spot.latitude}",
      lng: "#{spot.longitude}",
      title: "spot",
    });
二,。 在js中循环,而不是在视图上下文中循环

javascript:
  var spots = #{@spots.to_json};
  $(spots).each(function(index, obj) {
    map.addMarker({
      lat: obj.latitude,
      lng: obj.longitude,
      title: "spot",
    });
  });

似乎一旦进入
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]);
  }
这意味着你必须取消引用
循环中的对象。

在我看来不错。错误或问题是什么?未定义的局部变量或循环javascript的方法“spot”工作得非常好!我觉得这不是很优雅的混合语言那么多。谢谢我很高兴看到@xmpolaris给出了基本相同的答案——它验证了我的想法。很乐意帮忙。
{'spot': { 'latitude': ###, 'longitude': ### } }