Я пытаюсь понять javascript и то, как передаются переменные, но у меня не очень хорошо получается. Я пытаюсь обновить маркеры карты Google с помощью ajax, но ничего не происходит.
Я отправляю форму, которая отправляет некоторые переменные в контроллер. Некоторые вещи обрабатываются, и он отвечает .js на...
find.js.erb
$('#collapseTwo ul').html("<%= j render partial: 'events/sidebar', collection: @events %>");
alert(<%= raw @hash.to_json %>);
clearMarkers();
markers = handler.addMarkers(<%= raw @hash.to_json %>, {
draggable: false
});
Рендер работает нормально, так что там все работает, но я не могу достать маркеры, чтобы обновить карту. Это оповещение показывает [object Object]
, так что это, вероятно, правильно, но никаких действий с маркерами.
Я внес некоторые изменения в marker.coffee
в виде
clear: ->
@getServiceObject().setMap(null)
show: ->
@getServiceObject().setVisible(true)
hide: ->
@getServiceObject().setVisible(false)
так что clearMarkers();
работает. Это в другом файле, где я храню некоторые другие действия
events.js.coffee
jQuery ->
...
...
@clearMarkers = ->
for marker in Gmaps.store.markers
marker.clear()
Gmaps.store.markers = []
Итак... Сначала я вызываю карту с помощью...
jQuery ->
handler = Gmaps.build 'Google'
handler.buildMap {
provider: {
minZoom: 3
}, internal: {id: 'map'} }, ->
markers = handler.addMarkers( $('#map').data('events'),
draggable: false
flat: false
)
#moves map to marker clicked + open infowindow
$(document).on 'click', '#sideBar li', ->
markers[$(this).data('marker')].panTo()
markers[$(this).data('marker')].click()
Эта функция внизу... единственный способ получить доступ к массиву markers
состоял в том, что он находился внутри функции handler.buildMap
. Итак, должна ли переменная markers
быть глобальной? Как еще я могу воздействовать на них?
Кроме того, переменная handler
... мне кажется, она должна быть доступна везде. Я попытался вручную поместить @hash
в .addMarkers()
, но обработчик не построил маркеры.