Отображение ссылок в информационном окне Google Maps для нескольких маркеров с помощью Rails 3.1 - PullRequest
2 голосов
/ 02 января 2012

У меня есть карта с несколькими маркерами компаний, использующих API Google Maps v3. Мне нужно связать информационное окно с представлением компании, отображающим мое приложение, поэтому, если я нажму на маркер, откроется информационное окно с некоторой базовой информацией и ссылкой для просмотра сведений о компании. Код такой:

class CitiesController < ApplicationController

...

def businessmap
    @city = City.find(params[:id])
    @mapcenter = @city.geocode
    @businesses = @city.businesses
    respond_to do |format|
      format.html
      format.json { render :json => @businesses.to_json(:only => [:id, :business_name, :phone, :latitude, :longitude]) }
    end
  end
end

Само отображение карты здесь:

%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: 13,
  center: cityLatlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
  };

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

  $.getJSON('businessmap.json', function(businesses) {
  $(businesses).each(function() {
  var business = this;
  var infowindow = new google.maps.InfoWindow({
  content: business.business_name + '<br/>' + 'Phone: ' + business.phone
  });
  var marker = new google.maps.Marker({
  position: new google.maps.LatLng(business.latitude, business.longitude),
  map: map,
  icon: image
  });
  google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
  });
  });
  });
  }

%body{ :onload => "initialize()" }
  %div#map_canvas{:style => "width: 900px; height: 600px;"}

Итак, теперь есть только имя и номер телефона, как я могу отобразить дополнительную ссылку (или сделать так, чтобы название компании отображалось в виде ссылки)? Сама ссылка, например, "http://localhost:3000/businesses/186-Cityname-businessname" (определяется с помощью to_param).

Спасибо!

Ответы [ 2 ]

6 голосов
/ 03 января 2012

Код, который вы хотите изменить, приведен ниже, где content присваивается тому, что будет отображаться в информационном окне при его нажатии.

var infowindow = new google.maps.InfoWindow({
  content: business.business_name + '<br/>' + 'Phone: ' + business.phone
});

Хитрость заключается в построении URL, поскольку JavaScript не знает маршрутов Rails. Вы можете изменить рендеринг JSON на контроллере, чтобы включить URL, возможно добавив :methods => [:to_param] (лучший способ) ИЛИ создать совместимый URL в javascript (простой способ) и надеясь, что при разборе URL-адресов используются только целые числа.


Easy Way

На виду -

var infowindow = new google.maps.InfoWindow({
  content: '<a href="/businesses/' + business.id + '">' + business.business_name + '</a><br/>' + 'Phone: ' + business.phone
});

Немного лучше

В контроллере -

format.json { render :json => @businesses.to_json(:only => [:id, :business_name, :phone, :latitude, :longitude], :methods => [:to_param]) }

На виду -

var infowindow = new google.maps.InfoWindow({
  content: '<a href="/businesses/' + business.to_param + '">' + business.business_name + '</a><br/>' + 'Phone: ' + business.phone
});
0 голосов
/ 20 июня 2017

Вы можете использовать метод ссылок в javascript: вот как вы это делаете

var str = ( 8.8.8.8).toString().link("www.google.com");
var infowindow = new google.maps.InfoWindow({
   content: str
 }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...