如何在我的Rails应用中的Google地图自动填充功能中解决此问题?

时间:2014-12-12 06:01:29

标签: javascript ruby-on-rails ruby-on-rails-4 autocomplete

我正在为出租车预订平台创建一个rails应用程序,需要输入一个接收点和一个放置点。为此,我在application.html.erb中包含了以下脚本:标题标记:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&libraries=places"></script>
<script type="text/javascript">
  var placeSearch,autocomplete;
  function initialize() {
    autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), { types: [ 'geocode' ] });
    google.maps.event.addListener(autocomplete, 'place_changed', function() {
      fillInAddress();
    });

    autocomplete2 = new google.maps.places.Autocomplete(document.getElementById('autocomplete2'), { types: [ 'geocode' ] });
    google.maps.event.addListener(autocomplete2, 'place_changed', function() {
      fillInAddress();
});
  }
  function fillInAddress() {
    var place = autocomplete.getPlace();

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

    for (var j = 0; j < place.address_components.length; j++) {
      var att = place.address_components[j].types[0];
      if (component_form[att]) {
        var val = place.address_components[j][component_form[att]];
        document.getElementById(att).value = val;
      }
    }
  }
</script>

然后我在我的标签中使用了以下js:

<div class="field">
    <%= label_tag ("Pickup Location: ") %><br>
    <%= text_field_tag :pickup_loc, nil, :id => "autocomplete", :placeholder => "Enter your pickup location" %>
  </div>
  <div class="field">
    <%= label_tag ("Drop Location: ") %><br>
    <%= text_field_tag :drop_loc, nil, :id => "autocomplete2", :placeholder => "Enter your dropoff location" %>
  </div>

虽然自动完成功能似乎有效,但自动填充功能的结果似乎是Google地图提供的结果的一部分。例如,当我在我的应用程序中将“Asian GPR ...”作为我的搜索查询时,它没有显示亚洲GPR Multiplex作为选项:

enter image description here

但是,当我在Google地图中使用相同的查询字符串时,我会得到所需的结果:

enter image description here

我试图在此搜索很多,但找不到解决方案。我哪里错了?

1 个答案:

答案 0 :(得分:1)

如果您阅读the documentation here,则说:

  

类型数组指定显式类型或类型集合   在下面支持的类型中列出。如果没有指定任何内容,全部   返回类型。通常只允许一种类型。该   例外情况是您可以安全地混合地理编码和建立   类型,但请注意,这与指定no具有相同的效果   类型。

所以我想你只需要删除type选项,如下所示:

function initialize() {
    autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'));
    google.maps.event.addListener(autocomplete, 'place_changed', function() {
      fillInAddress();
    });

    autocomplete2 = new google.maps.places.Autocomplete(document.getElementById('autocomplete2'));
    google.maps.event.addListener(autocomplete2, 'place_changed', function() {
      fillInAddress();
});

或者您可以添加建立类型:

    function initialize() {
    autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), { types: [ 'geocode', 'establishment' ] });
    google.maps.event.addListener(autocomplete, 'place_changed', function() {
      fillInAddress();
    });

    autocomplete2 = new google.maps.places.Autocomplete(document.getElementById('autocomplete2'), { types: [ 'geocode', 'establishment' ] });
    google.maps.event.addListener(autocomplete2, 'place_changed', function() {
      fillInAddress();
});