1

私はこれで2日間頭を悩ませており、ここのすべての投稿を読み、ほぼすべてを試しました. これが私のJSです。最初のページの更新後にすべてが機能しますが、新しいブラウザを起動すると、最初にマップが呼び出されません。エラーが発生します:

Uncaught TypeError: Cannot read property 'addMarker' of undefined

これが私のコードです:私は非常に多くの異なる方法を試しました。誰かがこれを解決するのを手伝ってくれませんか!?

$(document).on("ready page:load", getDivData);

function getDivData(){
  var data = $('#gmap').data('mapdata');
  renderGoogleMap(data);
}

function renderGoogleMap(data) {
  var mapData = data;
  handler = Gmaps.build('Google');
  handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
    markers = handler.addMarkers(mapData);
    handler.bounds.extendWith(markers);
    handler.fitMapToBounds();
    handler.getMap().setZoom(12);
  });
}

//= require jquery-2.1.1.min
//= require jquery-ui
//= require jquery_ujs
//= require_self
//= require autocomplete-rails
//= require twitter/bootstrap
//= require bootstrap-dark
//= require underscore
//= require events
//= require event_show
//= require turbolinks
//= require gmaps/google

私のHTMLヘッダーで

  <title>MyApp</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
  <script src="//maps.google.com/maps/api/js?v=3.13&amp;sensor=false&amp;libraries=geometry" type="text/javascript"></script>
  <script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js' type='text/javascript'></script>

4

1 に答える 1

0

エラーが見つかりました。getDivData() 関数は、var data が true を返す場合にのみ呼び出す必要があります。更新された方法:

function getDivData(){
  var data = $('#gmap').data('mapdata');
  if(data){
    renderGoogleMap(data);
  }
}
于 2015-02-27T02:47:40.157 に答える