1

我正在使用 gmaps4rails,现在当我单击标记时会出现数据库中的信息,我需要在标记内放置一个链接。我如何能?

模型:

def gmaps4rails_address
  city
end

def gmaps4rails_infowindow
   "<h4>#{city}</h4>"  
end

控制器:

def index
  @postos = Posto.all
  @markers = Posto.all.to_gmaps4rails  

  @json = Posto.all.to_gmaps4rails  do |posto, marker|
    marker.json "\"id\": #{posto.id}"
  end  
  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @postos }
  end
end
4

2 回答 2

1

这里有两种方法。

直接在控制器中:

hashes = Gmaps4rails.build_markers(collection) do |item, marker|
  marker.infowindow(ActionController::Base.helpers.link_to(item.name ||= 'Name?',preplan_path(item)).html_safe)

  marker.title item.name
  marker.picture({
                     # :url => "/assets/building_icon.png",
                     :url => "/assets/text.png",
                     :width => 32,
                     :height => 32
                 })
  marker.lat item.latitude
  marker.lng item.longitude
end

并使用来自控制器的部分:

hashes = Gmaps4rails.build_markers(collection) do |item, marker|
  marker.infowindow render_to_string(:partial => "/structures/info_window", :locals => { :structure => item})

部分可以是任何你喜欢的:

# view/structures/_info_window.html.haml
= link_to structure.name, [structure.preplan, structure]
- unless structure.longitude.nil?
  %br
  = link_to "Drive to?", "https://maps.google.com/maps?daddr=#{structure.latitude},#{structure.longitude}", target: "_blank"
于 2014-07-10T10:56:42.790 回答
1

我不建议您使用该gmaps4rails_infowindow方法:不应在模型层提供视图详细信息。

您应该使用部分配置控制器中的信息窗口:

@json = Posto.all.to_gmaps4rails do |posto, marker|
  marker.infowindow render_to_string(:partial => "/path_to/your_template", :locals => { needed_locales })
end

详细信息在gem 的 wiki中。(你甚至可以使用 js 模板,但这不是问题,在 wiki 中也有解释)

于 2012-05-02T17:46:49.847 回答