ruby-on-rails - Gmaps4Rails.clear_marker 类型错误 : Cannot read property 'serviceObject' of null

标签 ruby-on-rails ruby ruby-on-rails-3 google-maps gmaps4rails

我一直在动态更新我的 Gmaps4Rails,方法是等待用户停止在他们的搜索表单中输入 0.5 秒,然后发送 AJAX 请求。然而,在 2 或 3 个请求之后, map 在 Gmaps4Rails.replaceMarkers 之后停止更新,Javascript 错误为

类型错误:无法读取 null 的属性“serviceObject”

我已经追踪到 Gmaps4Rails.clear_marker:

Gmaps4Rails.clearMarker = function(marker) {
  if (marker!=null) { // <-- I've added this line to make it work
    marker.serviceObject.setMap(null);
  }                   // <-- I've added this line to make it work
};

这是需要修补的东西还是我在其他地方做错了什么?

这是我的application.rb

中的相关部分
$('.venue_find').live('keyup', function() {
    window.clearTimeout(window.timeOutId);
    window.timeOutId = window.setTimeout(function() {
    $.get('/venues/find?address='+$('#venue_address').val()+","+$('#venue_city').val()+","+$('#venue_state').val()+","+$('#venue_postal_code').val()+","+$('#venue_country').val());
    },500); 
});

map 设置为:

<div id="venue_form">
  <div id="venue_map">
    <%= gmaps("map_options"=>{"centre_latitude"=>51.500181,"centre_longitude"=>-0.12619,"maxZoom" => 16, "auto_zoom"=>true},"markers"=>{"data"=>@json}) %>
  <div id="addresses">
  </div>
</div>

这是来自 */venues/_form.html.erb* 的相关内容

<%= form_for(@venue, :remote=>true) do |f| %>
    <div class="field">
        <%= f.label :address %><br />
        <%= f.text_field :address, :class=>"venue_find" %>
    </div>
    <div class="field">
        <%= f.label :city %><br />
        <%= f.text_field :city, :class=>"venue_find" %>
    </div>
    <div class="field">
        <%= f.label :state %><br />
        <%= f.text_field :state, :class=>"venue_find" %>
    </div>
    <div class="field">
        <%= f.label :postal_code %><br />
        <%= f.text_field :postal_code, :class=>"venue_find" %>
    </div>
    <div class="field">
        <%= f.label :country %><br />
        <%= f.text_field :country, :class=>"venue_find" %>
    </div>
<% end %>

这是 venues_controller.rb

def find
  if !params[:address].nil? && params[:address]!=""
    begin
      addresses=Gmaps4rails.geocode(params[:address])
      @json = "[" + addresses.map {|a|  "{\"lng\": \"#{a[:lng]}\",\"lat\": \"#{a[:lat]}\"} " }.join(",")+"]"
      @matched_addresses = addresses.map{|a| a[:matched_address]}.join("<br/>")
    rescue Gmaps4rails::GeocodeStatus
      @json=[]
      @matched_addresses=[]
    end
  else
    @json=[]
  end
  respond_to do |format|
    format.js
  end
end

最后是 find.js.erb

$('#addresses').empty();
$('#addresses').html('<%=pluralize(@matched_addresses.length,'result')%><br/><%=raw @matched_addresses %>');
Gmaps4Rails.replaceMarkers(<%= raw @json %>);

最佳答案

我无法重现你的错误,我什至不明白为什么你的修复有用:)

实际上,在clearMarkers中,所有现有的标记都有一个循环:

for (var i = 0; i < this.markers.length; ++i) {
  this.clearMarker(this.markers[i]);
}

所以如果没有标记,就没有循环...

您能否提供更多背景信息?

我发布了这么长的评论作为回答,因为我几乎是唯一一个回答这个标签的人

关于ruby-on-rails - Gmaps4Rails.clear_marker 类型错误 : Cannot read property 'serviceObject' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6993035/

相关文章:

ruby-on-rails - 如何使用 postgresql 在 Rails 中执行不区分大小写的顺序

ruby - 如何在 ruby​​ on rails 中从另一个应用程序调用一个应用程序中的方法

ruby-on-rails - 我们如何配置 Rails 以不清除测试数据库?

javascript - 淡出、淡入 : Variable references lost

ruby-on-rails - 如何在 Ubuntu 10.10 上更新 Ruby?

ruby - 如何 stub 方法调用,然后进行哈希查找?

ruby - 将方法名称作为参数传递给另一个方法

ruby-on-rails - 跨模型的 Active Record 预加载

ruby-on-rails - Errno::ETIMEDOUT:连接超时 - connect(2)

ruby-on-rails-3 - Rails 3 - 使文本字段仅接受数字值