0

Я пытаюсь понять javascript, и как переменные передаются, но я не слишком хорошо себя чувствую. Я пытаюсь обновить маркеры карты google с помощью ajax, но ничего не происходит.область значений маркеров для карт google (gmaps4rails gem)

Я отправляю форму, которая посылает некоторые переменные контроллеру. Некоторые вещи обрабатываются, и он отвечает .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(), но обработчик не построил маркеры.

ответ

2

Вам нужен магазин, доступный по всему миру.

Я предлагаю следующее:

Gmaps.store = {} 
jQuery -> 
    Gmaps.store.handler = Gmaps.build 'Google' 
    Gmaps.store.handler.buildMap... 
    Gmaps.store.markers = Gmaps.store.handler.addMarkers(...) 

Вы можете получить доступ к переменным внутри вашего js.erb, а также.

+0

Boom! Ты спасатель жизни. Это отличный способ сохранить переменные, спасибо! И я вижу всю функцию глобальной функции с определением функции с помощью '@clearMarkers = ->'. Когда я повторяю один и тот же поиск снова и снова, маркер уходит и возвращается правильно, но если я увеличиваю или уменьшаю масштаб, есть куча маркеров вокруг того, где он должен быть ... как его копии. Является ли моя функция 'clear' корректной? – Dudo

+0

Я добавил '@getServiceObject(). ServiceObject = null' в функцию clear ... то же самое. – Dudo

+0

Это еще один вопрос, но подсказка: его отношение к маркерам сохранения кластеров – apneadiving

Смежные вопросы