javascript - 在同一页面上的模态上使用许多动态 Google map - Rails

标签 javascript ruby-on-rails google-maps

我有一个包含 12 家商店的商店页面。每个商店都有一个按钮来显示其在 map 上的单独位置。问题是它不起作用(我在每张 map 上都得到相同的位置,它应该是动态的)

我正在做的是在每个商店的 ruby​​ block 内加载 map ( map 加载 12 次 - 向 Google API 发出 12 个请求):

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyBktelhtX7My2gbXhZIR8J9Lu6XXXQ1nNM">
</script>

<script type="text/javascript">
    var LocationData = [
        [<%= shop.latitude %>, <%= shop.longitude %>, '<%= shop.direction %>']
    ];
    var map;

    function initialize() {
        var mapOptions = {
            zoom: 3
        };
        var map = new google.maps.Map(document.getElementById('map-canvas-<%= shop.id %>'),
            mapOptions);
        var bounds = new google.maps.LatLngBounds();
        var infowindow = new google.maps.InfoWindow();


        for (var i in LocationData) {
            var p = LocationData[i];
            var latlng = new google.maps.LatLng(p[0], p[1]);
            bounds.extend(latlng);
            var image = 'assets/marcador_sushi.png';

            var marker = new google.maps.Marker({
                position: latlng,
                icon: image,
                map: map,
                title: p[2]
            });

            google.maps.event.addListener(marker, 'click', function() {
                infowindow.setContent(this.title);
                infowindow.open(map, this);
            });
        }

        map.fitBounds(bounds);
    }

    google.maps.event.addDomListener(window, 'load', initialize);
</script>

最佳答案

创建一个全局函数(可能在 app/assets/application.js 中),如下所示:

  function addShopMap(shop_id, lat, lng, direction){
    var mapOptions = {
        zoom: 3
    };
    var map = new google.maps.Map(document.getElementById('map-canvas-'+shop_id),
        mapOptions);
    var bounds = new google.maps.LatLngBounds();
    var infowindow = new google.maps.InfoWindow();

    var latlng = new google.maps.LatLng(lat, lng);
    bounds.extend(latlng);
    var image = 'assets/marcador_sushi.png';

    var marker = new google.maps.Marker({
        position: latlng,
        icon: image,
        map: map,
        title: direction
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(this.title);
        infowindow.open(map, this);
    });

    map.fitBounds(bounds);
  }

然后您应该在商店的每个 erb block 中调用此函数:

<script type="text/javascript">
  addShopMap('<%= shop.id %>', <%= shop.latitude %>, <%= shop.longitude %>, '<%= shop.direction %>');
</script>

关于javascript - 在同一页面上的模态上使用许多动态 Google map - Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39727700/

相关文章:

javascript - 对顺序/相关操作使用嵌套的 Q promise

javascript - 如何使用jquery删除php while循环中的每一行?

ruby-on-rails - 在 Rails 2.3 中构建多个条件的更好方法

javascript - Angular 2 在更改值后不更新 View

google-maps - MVC 4 和谷歌地图 API v3

javascript - html预加载器

javascript - 在表单输入中启用特殊字符

ruby-on-rails - 覆盖 rails 中的默认脚手架 View 不起作用

ruby-on-rails - 如何在 Rails 中测试从多个 IP 地址登录

android - 在 fragment 中的对话框 fragment 内显示谷歌地图