2016-02-17 3 views
1

Я использую Карты Google в своем приложении Rails и сталкиваюсь с некоторыми трудностями. Я хочу показать infowindow, когда пользователь нажимает на круг. Он отлично работает, когда он нажимает на маркер, но теперь, когда у меня есть круги, он не работает.Google Map infowindow не открывается

Вот мой код:

markers_json = <%= raw @circles %>; 
    var map; 
    var infoWindow; 

    buildMap = function(){ 
    var mapStyle = [ 
     // https://snazzymaps.com/style/70/unsaturated-browns 
     {"elementType":"geometry","stylers":[{"hue":"#ff4400"},{"saturation":-68},{"lightness":-4},{"gamma":0.72}]},{"featureType":"road","elementType":"labels.icon"},{"featureType":"landscape.man_made","elementType":"geometry","stylers":[{"hue":"#0077ff"},{"gamma":3.1}]},{"featureType":"water","stylers":[{"hue":"#00ccff"},{"gamma":0.44},{"saturation":-33}]},{"featureType":"poi.park","stylers":[{"hue":"#44ff00"},{"saturation":-23}]},{"featureType":"water","elementType":"labels.text.fill","stylers":[{"hue":"#007fff"},{"gamma":0.77},{"saturation":65},{"lightness":99}]},{"featureType":"water","elementType":"labels.text.stroke","stylers":[{"gamma":0.11},{"weight":5.6},{"saturation":99},{"hue":"#0091ff"},{"lightness":-86}]},{"featureType":"transit.line","elementType":"geometry","stylers":[{"lightness":-48},{"hue":"#ff5e00"},{"gamma":1.2},{"saturation":-23}]},{"featureType":"transit","elementType":"labels.text.stroke","stylers":[{"saturation":-64},{"hue":"#ff9100"},{"lightness":16},{"gamma":0.47},{"weight":2.7}]} 
    ]; 

    handler = Gmaps.build('Google'); 
    map = handler.buildMap({ 
     internal: {id: 'map'}, 
     provider: { 
     //disableDefaultUI: true, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     styles: mapStyle, 
     scrollwheel: false 
     } 
    }, function(){ 
     var circles = handler.addCircles(markers_json, {strokeWeight: 1, strokeColor: '#aaa'}); 
     handler.bounds.extendWith(circles); 
     handler.fitMapToBounds(); 

     for (var i = 0; i < circles.length; ++i) { 
     var marker = circles[i]; 
     //google.maps.event.addListener(marker.serviceObject, 'click', onMarkerClick(marker)); 
     addInfoWindow(marker, 'hey'); 
     } 

    }); 

    }; 

    function addInfoWindow(marker, content) { 
    var infoWindow = new google.maps.InfoWindow({ 
     content: content 
    }); 

    google.maps.event.addListener(marker.serviceObject, 'click', function() { 
     i = infoWindow.open(map, marker.serviceObject); 
     console.log(i); 
    }); 
    } 

У меня есть эта ошибка снова и снова, когда я пытаюсь открыть InfoWindow: Uncaught TypeError: Cannot read property 'get' of undefined(…)

Так что я пытался делать i = infoWindow.open(map.serviceObject, marker.serviceObject); , но теперь ничего не происходит, я даже не имеют сообщения об ошибке.

Я действительно не знаю, что еще я могу сделать ... Не могли бы вы мне помочь?

ответ

1

2-й аргумент infoWindow.open(); должен быть MVC-объект с position -свойства типа google.maps.LatLng

A google.maps.Marker действительно есть position -property, но google.maps.Circle не делает.

Использование setOptions для установки map и position (например центр окружности) от InfoWindow:

infoWindow.setOptions({ 
    map:  map.serviceObject, 
    position: marker.serviceObject.getCenter() 
}); 
Смежные вопросы