2014-12-11 2 views
1

Как инициализировать объекты googles для использования формы автозаполнения в Meteor? https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressformКак включить адресную форму автозаполнения Google Place в Meteor V1

Я взял базовый подход и использовал предоставленные образцы кода. У меня установлен пакет HTTP. Шаблон имеет форму отображения, но это не соединение googles с сервисом. Я предполагаю, что объекты не инициализируются и нуждаются в помощи для решения этой проблемы.

Template.addressForm.rendered = function ({ 
      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 initialize() { 
      // 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. 
      google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      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 = new google.maps.LatLng(
        position.coords.latitude, position.coords.longitude); 
       var circle = new google.maps.Circle({ 
       center: geolocation, 
       radius: position.coords.accuracy 
       }); 
       autocomplete.setBounds(circle.getBounds()); 
      }); 
      } 
     } 
     }); 

HTML:

  <template name="addressForm"> 

      <div id="locationField"> 
        <input id="autocomplete" placeholder="Enter your address" 
         onFocus="geolocate()" type="text"> 
       </div> 

       <table id="address"> 
        <tr> 
        <td class="label">Street address</td> 
        <td class="slimField"><input class="field" id="street_number" 
          disabled="true"></td> 
        <td class="wideField" colspan="2"><input class="field" id="route" 
          disabled="true"></td> 
        </tr> 
        <tr> 
        <td class="label">City</td> 
        <td class="wideField" colspan="3"><input class="field" id="locality" 
          disabled="true"></td> 
        </tr> 
        <tr> 
        <td class="label">State</td> 
        <td class="slimField"><input class="field" 
          id="administrative_area_level_1" disabled="true"></td> 
        <td class="label">Zip code</td> 
        <td class="wideField"><input class="field" id="postal_code" 
          disabled="true"></td> 
        </tr> 
        <tr> 
        <td class="label">Country</td> 
        <td class="wideField" colspan="3"><input class="field" 
          id="country" disabled="true"></td> 
        </tr> 
       </table> 
       </template> 

appBody:

<head> 
     <title>publishcity</title> 
     <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
     <meta charset="utf-8"> 
     <style> 
      html, body, #map-canvas { 
      height: 100%; 
      margin: 0px; 
      padding: 0px 
      } 
     </style> 
     <link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"> 
     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places"></script> 
    </head> 

ответ

0

вам нужно запустить функцию инициализации в примере она вызывается на теле OnLoad крючок

<body onload="initialize()"> 

вы миг ht опустили его в пути

, взяв код из функции, чтобы он мог работать, вероятно, все, что вам нужно, чтобы оно работало

Смежные вопросы