栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Google Maps for Rails-使用AJAX更新标记

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Google Maps for Rails-使用AJAX更新标记

您为什么不只使用新标记更新地图?意思是,无需在每次搜索后重新渲染整个地图,只需通过删除所有标记并添加新标记来更新现有地图上的标记。

我尚未验证该方法,但我想它应该可以工作并且效率更高:

创建一个

app/assets/javascript/map.js
文件。您可以在此处存储与地图相关的功能。创建一个函数来更新此文件中的地图标记:

map.js

(function() {    var __markers;  function updateMarkers(map, markersData)   {    // Remove current markers    map.removeMarkers(__markers);    // Add each marker to the map according to received data    __markers = _.map(markersData, function(markerJSON) {      marker = map.addMarker(markerJSON);      map.getMap().setZoom(4); // Not sure this should be in this iterator!      _.extend(marker, markerJSON);      marker.infowindow = new google.maps.InfoWindow({        content: marker.infowindow      });      return marker;    });    map.bounds.extendWith(__markers);    map.fitMapToBounds();  };  // "Publish" our method on window. You should probably have your own namespace  window.updateMarkers = updateMarkers;})();

此功能可用于初始化地图并进行更新。由于您不会(如果我的回答令人满意)两次渲染地图,因此您可以删除,

_google_map.erb
然后将其内容放回
search.html.erb
,但是使用我们刚刚创建的功能:

search.html.erb

    <div id="map" style='width: 100%; height: 700px;'></div>  <!-- Beginning Google maps --><script type="text/javascript" id="map_script">   $(document).ready(function() {       mapHandler = Gmaps.build('Google');       mapHandler.buildMap({ provider: {disableDefaultUI: true,mapTypeId: google.maps.MapTypeId.TERRAIN         }, internal: {id: 'map'}       }, function(){         var markersData = <%= raw @hash.to_json %>;         updateMarkers(mapHandler, markersData);       });   }); // document ready</script>

声明变量时,请 不要忘记var关键字 ,否则它们最终将成为全局变量,这很糟糕^^
请注意,我故意将其保留

mapHandler
为全局变量:稍后当有人使用时,您将需要访问处理程序以更新标记搜索。这可能不是理想的事情,但是这个问题不是关于重构代码的,所以让我们保持这种方式。

因此,现在我的解决方案为您带来了一张地图,该地图在页面加载时使用给定的标记进行了初始化。换句话说,什么都没有改变!

但是,现在允许您重复使用此

updateMarkers
功能来更改地图上显示的标记。那就是您的
search.js.erb
脚本应该执行的操作:

search.js.erb

(function() {  var markersData = <%= raw @hash.to_json %>;  updateMarkers(mapHandler, markersData);})();

而已!希望它将带您进入项目的下一步:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418195.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号