Google地图未在首次加载

时间:2016-06-06 12:55:56

标签: ruby-on-rails google-maps

我试图按照tutorial来加载gpx文件但是使用rails 4.2.6。我有它工作,但我有一个问题,当我加载轨道#index视图,我点击轨道看到它,它没有加载谷歌地图(其余的页面加载)但如果我右键点击链接并在另一个标签页面中打开它或者自己输入网址,它会加载Google地图。

track#index视图是使用scaffolding:

生成的
<%= link_to track_path(track), class: 'btn btn-xs', title: "#{ t('.show', default: t('helpers.links.show')) }" do %>
        <%= glyph 'info-sign' %>
      <%- end -%>

当我点击它时,调用曲目#show controller:

  def show
@track = Track.find(params[:id])
respond_to do |format|
  format.html  
  format.json {
    render :json => @track.to_json(:methods => [:polyline],:only => [:name])
  }
end

折线只是一种使用Polyline gem将gpx点编码为折线的方法。

曲目#show view加载地图:

<div id="map_canvas" style="height: 200px; margin-bottom: 20px"></div>

地图的初始化代码在coffeescript:

gm_init = ->
  gm_center = new google.maps.LatLng(38, 0)
  gm_map_type = google.maps.MapTypeId.SATELLITE 
  map_options = {center: gm_center, zoom: 8, mapTypeId: gm_map_type}
  new google.maps.Map(@map_canvas,map_options);
$ ->
  map = gm_init()

我不明白为什么当加载/ track / 1工作正常时,点击索引加载相同的网址就会显示垫子和空白区域

2 个答案:

答案 0 :(得分:3)

turbolinks和Rails 4存在问题.Turbolinks不会加载加载地图所需的js。要解决此问题,我已将'data-no-turbolink': true添加到使用地图加载页面的链接:

<%= link_to track_path(track), class: 'btn btn-xs', title: "#{ t('.show', default: t('helpers.links.show')) }", 'data-no-turbolink':  true do %>

还有其他方法,但我认为这是最简单的方法。

答案 1 :(得分:2)

这很可能是Turbolinks的一个问题。我在我的应用程序中也遇到了这个问题。 我通过将我的JS包装在

中来解决我的问题

fit('should get response',async(inject([XHRBackend, MyService], (mockBackend, service) => { //<--- wrap inside async call console.log("inside fit"); let response = "something returned from service"; let responseOptions = new ResponseOptions({ body: JSON.stringify(response) }); //<--- stringify the response mockBackend.connections.subscribe((connection: MockConnection) => { connection.mockRespond(new Response(responseOptions)); }); service.getData('xyz').subscribe((a) => { expect(a.length).toBe(11); //will fail expect(a).toContain(“something”); //will pass }); })));