在javascript中使用循环,使用实例varibale作为rails控制器的数据源

在javascript中使用循环,使用实例varibale作为rails控制器的数据源,javascript,ruby-on-rails-3,google-maps,Javascript,Ruby On Rails 3,Google Maps,我需要显示一个带有几个标记的谷歌地图。我的问题是在地图上设置所有的标记。我有一个城市控制器和一个地图视图。以下是相关代码: city_cntroller.rb def map @city = City.find(params[:id]) @mapcenter = @city.geocode @businesses = @city.businesses @numberofbusinesses = @city.businesses.count end map.htm

我需要显示一个带有几个标记的谷歌地图。我的问题是在地图上设置所有的标记。我有一个城市控制器和一个地图视图。以下是相关代码:

city_cntroller.rb

def map
    @city = City.find(params[:id])
    @mapcenter = @city.geocode
    @businesses = @city.businesses
    @numberofbusinesses = @city.businesses.count
end
map.html.haml

%script{:type => "text/javascript", :charset => "utf-8", :src => "http://maps.googleapis.com/maps/api/js?v=3.6&sensor=false&region=IN"}
%script{:type => "text/javascript"}
  function initialize() {

  var cityLatlng = new google.maps.LatLng(
  = @mapcenter[0]
  ,
  = @mapcenter[1]
  );

  var options = {
  zoom: 12,
  center: cityLatlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  var map = new google.maps.Map(document.getElementById("map_canvas"), options);

  var businesscount = (
  = @numberofbusinesses
  )

  for (var i = 0; i <= businesscount; i++) {
  var marker = new google.maps.Marker({
  position: new google.maps.LatLng(
  = @businesses[i].latitude
  ,
  = @businesses[i].longitude
  ),
  map: map,
  });
  };
  }
%body{ :onload => "initialize()" }
  %div#map_canvas{:style => "width: 900px; height: 350px;"}
%script{:type=>“text/javascript”,:charset=>“utf-8”,:src=>“http://maps.googleapis.com/maps/api/js?v=3.6&sensor=false®ion=IN"}
%脚本{:type=>“text/javascript”}
函数初始化(){
var citylalng=新的google.maps.LatLng(
=@mapcenter[0]
,
=@mapcenter[1]
);
变量选项={
缩放:12,
中心:城市化,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“map_canvas”),选项);
var businesscount=(
=@numberofbusiness
)
对于(var i=0;i“initialize()”}
%div#map_canvas{:style=>“宽度:900px;高度:350px;”}
问题是,当我尝试在@business中循环时,不接受“i”,错误消息是

未定义的局部变量或方法“i”#

我如何在@business中循环以在地图上放置所有标记


感谢您的帮助!

您的代码无法工作,因为您混合了服务器端和客户端脚本。该变量存在于浏览器中,@businesss数据仅对服务器可用

通常,您应该尝试将数据结构导出为JSON,JavaScript可以内联读取JSON,然后在客户端对其进行迭代

响应JavaScript应该如下所示:

// exported from rails
var businesses = [ { lat: 123, long: 632 }, { lat: 435, lon: 214 } ];

for (var i = 0; i < businesses.length; i++)
{
    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(businesses[i].lat, businesses[i].lon),
        map: map
    });
}
//从rails导出
var业务=[{lat:123,long:632},{lat:435,lon:214}];
对于(var i=0;i

您可以阅读如何将内容导出到JSON。

谢谢,我会尝试一下。但是为什么“@mapcenter”可以工作?它根据城市管理员提供的“@mapcenter”完美地将地图居中…
@mapcenter[0]
是一个标量数字。您可以回显数字,因此它们在JavaScript中显示为常量。但是,在循环中,您混合了客户端和服务器端变量(@business和i)。