0

すべての人に上司がいる場合、私は人のリストを持っています。マップの横には、チェックボックスの形でボスのリストがあります。ボスのチェックボックスをクリックすると、マップ上にボスの人物がマーカーとして表示されます。

上司に人がいない場合に必要ですが、ある場所を中心に地図を表示しますが、javascript に問題があります。

コントローラ

if params[:boss]
  bosses_array = params[:boss].map(&:to_i)

  @bosses = User.joins(:roles).where("roles.name ='boss' and users.id in (?)", bosses_array)
  people = People.where("boss_id in (?)", bosses_array)

  if people.count != 0
    @json = people.to_gmaps4rails
    @markers = true
  else
    @markers = false
  end

else  
  @bosses = User.joins(:roles).where("roles.name ='boss'")
  @markers = false
end

Index.html.erb

<%= gmaps("markers" => {"data" => @json}) %>

<% content_for :scripts do -%>
<script type="text/javascript">

if(<%= @markers %>)
{
 Gmaps.map = new Gmaps4RailsGoogle();
 Gmaps.load_map = function() {
 Gmaps.map.map_options.maxZoom = 15;
 Gmaps.map.initialize();

 Gmaps.map.markers =  <%= raw @json %>;
 Gmaps.map.create_markers();
 Gmaps.map.callback();
 Gmaps.map.map_options.auto_zoom = true;      
 Gmaps.map.adjustMapToBounds();
 };

 Gmaps.loadMaps();

}
else
{

 Gmaps.map = new Gmaps4RailsGoogle();
 Gmaps.load_map = function() {
 Gmaps.map.map_options.maxZoom = 15;
 Gmaps.map.map_options.center_latitude = "30";
 Gmaps.map.map_options.center_longitude = "20";
 Gmaps.map.initialize();
 //create markers without data, so there are no markers
 Gmaps.map.create_markers();
 Gmaps.map.callback();
 Gmaps.map.map_options.auto_zoom = true;      
 Gmaps.map.adjustMapToBounds();
 };

 Gmaps.loadMaps();


}


</script>

ボスに人がいる場合はマーカーが表示されますが、人がいない場合は古いマーカーが削除されずに残ります。

4

1 に答える 1

0

以前に直面した同じ問題。

マーカーを削除するには、空のマーカー リストを渡す必要があります。そうしないと、以前のマーカー リストが保持されて表示されます。

Gmaps.map.initialize();
//create markers without data, so there are no markers
Gmaps.map.markers = []
Gmaps.map.create_markers();

別の方法として、マーカーを jquery に置き換えることができます

Gmaps.loadMaps();
Gmaps.map.replaceMarkers('');

これがお役に立てば幸いです。

ありがとう。

于 2013-10-27T13:18:20.660 に答える