Google maps-передача информации в прослушиватель событий
Я думаю, что это проблема области. Поскольку событие запускается после добавления всех прослушивателей, num_markers всегда переопределяется следующим циклом в цикле.
есть ли способ передать переменные в функцию события?
Я пробовал такой подход, но это не для меня. Google Maps: прослушиватель событий помнит только конечное значение переменной
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
var info_window = new google.maps.InfoWindow();
var markers = [];
function load_markers() {
var bounds_url = map.getBounds().toUrlValue();
$.ajax({
url:'/retailer-markers?bounds='+bounds_url,
dataType: 'json',
success: function(data) {
for(i = 0; i < data.length; i++) {
var marker_pos = new google.maps.LatLng(data[i]['lat'], data[i]['long']);
//Every time the listener event is called this number is the length of the array
var marker_num = get_markers_count();
markers[marker_num] = new google.maps.Marker({
position: marker_pos,
map: map,
title:data[i]['Title'],
icon: image
});
google.maps.event.addListener(markers[marker_num], 'click', function() {
info_window.setContent('hello');
var pos = markers[marker_num].getPosition();
info_window.setPosition(pos);
info_window.open(map, markers[marker_num]);
});
}
}
});
}
1 ответов
решение было использовать this
для деталей маркера. Любые другие переменные могут быть установлены на маркер с marker.set('some_var', data);
$.ajax({
url:'/retailer-markers?bounds='+bounds_url,
dataType: 'json',
success: function(data) {
for(i = 0; i < data.length; i++) {
var info_window = get_info_window();
var marker_pos = new google.maps.LatLng(data[i]['lat'], data[i]['long']);
marker_num = get_markers_count();
marker = new google.maps.Marker({
position: marker_pos,
map: map,
title:data[i]['Title'],
icon: image
});
markers.push(marker);
marker.set('retailer', data[i]);
google.maps.event.addListener(marker, 'click', function() {
var retailer = this.get('retailer');
info_window.setContent(retailer['name']);
info_window.open(map, this);
});
}
}
});