Я обновлял свои Gmaps4Rails динамически, ожидая, пока пользователь не перестанет набирать форму поиска в течение 0,5 с, а затем отправив запрос AJAX.Однако после 2 или 3 запросов карта перестает обновляться после Gmaps4Rails.replaceMarkers с ошибкой Javascript
TypeError: Невозможно прочитать свойство 'serviceObject' со значением null
, которое яотследил до 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);
});
Карта настроена как:
<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 %>);