4

は、私が唯一のこのページではJavaScriptとGoogleマップライブラリをロードしたいレール5ターボリンク5とGoogleマップの仕方は?私はturbolinks 5とレール5を使用してGoogleは、Googleのウェブサイトからの例を使用して動作するようにオートコンプリートアドレスのフォームを置く取得しようとしている

hereを見つけました。レール5とturbolinksドキュメントを1として5

<script> 
    // This example displays an address form, using the autocomplete feature 
    // of the Google Places API to help users fill in the information. 

    // This example requires the Places library. Include the libraries=places 
    // parameter when you first load the API. For example: 
    // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> 

    var placeSearch, autocomplete; 
    var componentForm = { 
    street_number: 'short_name', 
    route: 'long_name', 
    locality: 'long_name', 
    administrative_area_level_1: 'short_name', 
    country: 'long_name', 
    postal_code: 'short_name' 
    }; 

    function initAutocomplete() { 
    // Create the autocomplete object, restricting the search to geographical 
    // location types. 
    autocomplete = new google.maps.places.Autocomplete(
     /** @type {!HTMLInputElement} */(document.getElementById('autocomplete')), 
     {types: ['geocode']}); 

    // When the user selects an address from the dropdown, populate the address 
    // fields in the form. 
    autocomplete.addListener('place_changed', fillInAddress); 
    } 

    function fillInAddress() { 
    // Get the place details from the autocomplete object. 
    var place = autocomplete.getPlace(); 

    for (var component in componentForm) { 
     document.getElementById(component).value = ''; 
     document.getElementById(component).disabled = false; 
    } 

    // Get each component of the address from the place details 
    // and fill the corresponding field on the form. 
    for (var i = 0; i < place.address_components.length; i++) { 
     var addressType = place.address_components[i].types[0]; 
     if (componentForm[addressType]) { 
     var val = place.address_components[i][componentForm[addressType]]; 
     document.getElementById(addressType).value = val; 
     } 
    } 
    } 

    // Bias the autocomplete object to the user's geographical location, 
    // as supplied by the browser's 'navigator.geolocation' object. 
    function geolocate() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function(position) { 
     var geolocation = { 
      lat: position.coords.latitude, 
      lng: position.coords.longitude 
     }; 
     var circle = new google.maps.Circle({ 
      center: geolocation, 
      radius: position.coords.accuracy 
     }); 
     autocomplete.setBounds(circle.getBounds()); 
     }); 
    } 
    } 
</script> 

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initAutocomplete" 
    async defer></script> 

答えて

0

で動作するように次のJavaScriptを取得するための正しい方法だろう何

Turbolinksは、ページの体内のスクリプト要素を評価ページをレンダリングするたびにインラインボディスクリプトを使用して、ページごとのJavaScript状態またはブートストラップクライアントサイドモデルを設定することができます。ビヘイビアをインストールする、またはページが変更されたときにさらに複雑な操作を行うには、スクリプト要素を避けて、代わりにturbolinks:loadイベントを使用します。

しかし、それは私のために働いていなかった理由は、私が持っていたレイアウト/ application.html.erbにあった:

<%= javascript_include_tag "application", 'data-turbolinks-track' => true %> 

それは次のようになります。

<%= javascript_include_tag "application", 'data-turbolinks-track': 'reload' %> 
1

これを試してみてください...

google.maps.event.addDomListener(window, 'turbolinks:load', initialize); 
1

私はTurbolinks 5とGoogle Maps APIの問題を解決しました。私のGoogleマップスクリプトタグのi番目のdata-turbolinks-eval = "false"属性。

... application.html.erb 
<head> 
<!-- Other HTML page Head content -->  
<title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title> 
<script async src="https://maps.googleapis.com/maps/api/js?key=YOUR_GOOGLE_MAPS_API_KEY" data-turbolinks-eval="false"></script> 
<%= javascript_include_tag "application", 'data-turbolinks-track' => 'reload' %> 
</head> 

とあなたのコーヒーで

/JSファイルが使用します。

coffee: 
$(document).on "turbolinks:load", -> 
    map = new google.maps.Map $('map').get(0), mapOptions 
js: 
$(document).on("turbolinks:load", function(){ 
    map = new google.maps.Map($('map').get(0), mapOptions) 
}) 
関連する問題