Использование цикла в javascript с использованием экземпляра varibale в качестве источника данных из контроллера rails - PullRequest
0 голосов
/ 21 декабря 2011

Мне нужно отобразить карту Google с несколькими маркерами. Проблема, которую я имею, состоит в том, чтобы установить все маркеры на карте. У меня есть контроллер города и вид карты. Вот соответствующий код:

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;"}

Проблема в том, что "i" не принимается, когда я пытаюсь перебрать через @Business, появляется сообщение об ошибке

неопределенная локальная переменная или метод `i 'для # <#: 0xbd2d970>

Как я могу пройтись по @ bususiness, чтобы разместить все маркеры на карте?

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 21 декабря 2011

Ваш код не работает, потому что вы смешиваете серверные и клиентские скрипты. Переменная существует в браузере, данные @bususiness доступны только для сервера.

В общем, вы должны попытаться экспортировать свою структуру данных в JSON, который JavaScript может читать inline, а затем выполнить итерацию по нему на стороне клиента.

Ответ 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
    });
}

Вы можете прочитать, как экспортировать вещи в JSON в этом посте .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...