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

javascript:
  [email protected] do |spot|
      map.addMarker({
        lat: "#{spot.latitude}",
        lng: "#{spot.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]);
  }

你需要确保在运行这些东西时theMap是可用的,但我认为这可能会起到作用。您还应该检查每个@spot的json格式。根据json的设置方式,每个点可能看起来像
{'spot': { 'latitude': ###, 'longitude': ### } }

这意味着你必须取消引用
循环中的对象。

09-26 13:29