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

索引.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 回答